【问题标题】:Save reverse Foreign Key in Django CreateView在 Django CreateView 中保存反向外键
【发布时间】:2020-01-25 08:45:44
【问题描述】:

我有这两个模型:

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"))
    ...

我想根据当前登录用户使用Django的CreateView时自动填充company字段。因为每个Company 模型与User 都有ForeignKey 关系。所以我重写了 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)

【问题讨论】:

  • 但如果Company 对用户有ForeignKey,那么用户有、一个或更多相关@987654331 @s。因此,您不能设置“用户的公司”。

标签: django django-views


【解决方案1】:
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

【讨论】:

  • 谢谢,这就是我要找的。但是 Company.objects.get(user=self.request.user) 应该是 Company.objects.get(contact_person=self.request.user) 因为我的模型中的字段名称。
猜你喜欢
  • 1970-01-01
  • 2018-11-24
  • 2018-11-04
  • 2016-09-18
  • 2019-12-01
  • 2014-06-19
  • 1970-01-01
  • 2011-04-26
  • 2015-08-08
相关资源
最近更新 更多