首页 > 解决方案 > 从 CreateView 填充 added_by 字段

问题描述

我已经扩展了django-taggit TagBase模型以包含一个added_by字段作为 ForeignKey 到User

class TagBase(models.Model):
    name = models.CharField(verbose_name=_("Name"), unique=True, max_length=100)
    slug = models.SlugField(verbose_name=_("Slug"), unique=True, max_length=100)
    added_by = models.ForeignKey(User, on_delete=models.CASCADE)

一切都很好,但是我在从我的 CreateView 填充该字段时遇到问题。这是我尝试过的:

class NoteCreateView(LoginRequiredMixin, CreateView):
    model = Note
    fields = [
        'title',
        'description',
        'notebook',
        'tags'
    ]

    def form_valid(self, form):
        form.instance.added_by = self.request.user
        form.instance.save()
        for tag in form.instance.tags.all():
            tag.added_by = self.request.user
        return super().form_valid(form)

但我收到一个错误:

IntegrityError at /notes/1/create/ NOT NULL constraint failed: taggit_tag.added_by_id

如何added_by在我的标签实例上正确地自动填充字段?

标签: pythondjangodjango-taggit

解决方案


用户是匿名的吗?我认为您可以打印self.request.user进行检查。


推荐阅读