首页 > 解决方案 > 在 Django CreateView 中保存反向外键

问题描述

我有这两个模型:

class Company(models.Model):
    ...
    contact_person = models.ForeignKey(
        settings.AUTH_USER_MODEL, on_delete=models.CASCADE, verbose_name=_("Contact person"))
    ...
class Assignment(models.Model):
    ...
    company = models.ForeignKey('company.Company', null=True, blank=True,
                                on_delete=models.CASCADE, verbose_name=_("Company"))
    ...

我想company在使用 Django 时CreateView根据当前登录用户自动填充该字段。因为每个Company模型都ForeignKeyUser. 所以我重写了 form_valid 方法,但是我怎样才能在这里为 company 字段获取正确的值呢?

class AssignmentCreateView(generic.edit.CreateView):

    def form_valid(self, form):
        instance = form.save(commit=False)
        instance.company = self.request.user
        super(AssignmentCreateView, self).save(form)

标签: djangodjango-views

解决方案


def form_valid(self, form):
    company = Company.objects.get(user=self.request.user)
    form.instance.company = company
    valid_data = super(AssignmentCreateView, self).form_valid(form)
    return valid_data

推荐阅读