我正在尝试扩展django-taggit Tag
模型,使其上具有added_by
(用户的外键)字段,因此我可以查询特定用户添加的所有标签。因此,我创建了一个应用程序,并在models.py中创建了另一个名为MyTag
的模型,并在其上有一个Tag
要使用的OneToOneField:
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
模型以在其上添加了add_by字段?
答案 0 :(得分:0)
我建议使用继承而不是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])