首页 > 解决方案 > Django 在views.py 中访问当前对象的外键

问题描述

我有三个模型:

Class Collection(models.Model):
    var_1 = .....
    var_2 = ....

Class Titles(models.Model):
    var_a = models.ForeignKey(Collection,
    related_name="has_titles", on_delete=models.CASCADE)
    var_b = ...

Class OtherObject(models.Model):
    var_x = models.ForeignKey(Collection,
    related_name="has_other_object", on_delete=models.CASCADE)
    var_y = ...

在views.py 中,我使用带有表单的CBV DetailView(然后使用formMixin 或MultipleFormsMixin,但这不是重点)。

因此,基本上每个 Title 都通过 ForeignKey 链接到 Collection,每个 OtherObject 也通过 ForeignKey 链接到 Collection。

因此,当用户在 Title 模型的详细信息页面中时,他可以填写表单以添加 OtherObject,然后将显示在与 Title 链接的 Collection detailView 上。

换句话说,我想要的是 var_x = var_a of current Title :

if form.is_valid():
    new_other_object = form.save(commit=False)
    new_other_object.var_x = HERE I WANT TO GET var_a OF CURRENT OBJECT
    new_other_object.save()

因此,由于 Title 有一个 ForeignKey,其中包含它所属的 Collection 的 ID,我尝试使用诸如 self.get_object() 之类的东西。我阅读了诸如使用 self.get_object().var_a 之类的东西,但是我尝试了所有不同的解决方案,但我得到了错误,主要是错误提到该对象必须是 Collection 的实例。

您将如何实现这一目标?

谢谢。

标签: pythondjango

解决方案


您只需要创建一个查询集: new_other_object.var_x = Title.objects.get(pk=form['id']) 这样您就可以获取将成为外键的对象,然后插入外键字段,然后你保存,应该工作


推荐阅读