python - 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 的实例。
您将如何实现这一目标?
谢谢。
解决方案
您只需要创建一个查询集: new_other_object.var_x = Title.objects.get(pk=form['id']) 这样您就可以获取将成为外键的对象,然后插入外键字段,然后你保存,应该工作
推荐阅读
- javascript - 如何将记录添加到数组
- c++ - 基于 IOKit 的 kext 驱动程序中的单例类
- php - php没有显示else块
- sql - 仅当通过作业执行时,从视图创建表的 MSSQL 动态 SQL 才会失败
- python - 根据步长调整for循环的范围
- c# - Ubuntu 16.04 下 C# 单声道项目的 windows-1251 编码
- vba - Excel vba - 将用户当前的自动完成设置保存为变量
- elasticsearch - ElasticSearch 升级 1.x 到 6.x
- python-3.x - 如何解决 Python 3.5 中多处理的 OSError?
- mysql - 选择截至日期的行数