使用一对一字段扩展模型



我正在尝试扩展 django-taggitTag模型以在其上有一个added_by(ForeignKey to User(字段,因此我可以查询特定用户添加的所有标签。因此,我创建了一个应用程序,并 models.py 在那里创建了另一个模型,称为MyTag,并且我有一个OneToOneField可以对其进行Tag

from django.contrib.auth.models import User
from django.db import models
from django.db.models.signals import post_save
from django.dispatch import receiver
from taggit.models import Tag

class MyTag(models.Model):
tag = models.OneToOneField(Tag, on_delete=models.CASCADE)
added_by = models.ForeignKey(User, on_delete=models.CASCADE)
@receiver(post_save, sender=Tag)
def create_tag(sender, instance, created, **kwargs):
if created:
MyTag.objects.create(tag=instance, added_by=???)
@receiver(post_save, sender=Tag)
def save_tag(sender, instance, **kwargs):
instance.mytag.save()

问题是,我无法从 models.py 内部访问request.user

我如何克服这个问题,即如何正确扩展 django-taggit 的Tag模型以在其上added_by字段?

我建议使用继承而不是OneToOneField。

from taggit.models import Tag
class MyTag(Tag):
added_by = models.ForeignKey(User, on_delete=models.CASCADE)

现在,MyTag模型继承了Tag模型的所有属性和方法。更多信息在这里: https://docs.djangoproject.com/en/2.2/topics/db/models/#model-inheritance

现在,要创建一个新的 MyTag 实例,您可以在视图中执行以下操作:

MyTag.objects.create(added_by=request.user , [... other Tag properties])

最新更新