在Django中使用继承模型获取相关对象的主键
Posted
技术标签:
【中文标题】在Django中使用继承模型获取相关对象的主键【英文标题】:Getting the primary key of related object with inherited model in Django 【发布时间】:2012-01-15 09:25:45 【问题描述】:我有以下型号:
class A(TranslatableModel):
translations = TranslatedFields(
name = models.CharField(max_length=30)
)
f = IntegerField()
class B(A):
def __init__(self, *args, **kwargs):
super(B, self).__init__(*args, **kwargs)
some_field = ...
然后我创建一个 B 的实例,我相信它创建了 A 的实例。
b = B.objects.create(some_field='aaa', f=15)
我现在如何访问与b
对象相关的模型A
的对象?有什么办法可以从B那里得到A的PK吗?
【问题讨论】:
【参考方案1】:如果在 B 上指定 OneToOneField 且 parent_link=True,则可以控制名称。例如:
class A(TranslatableModel):
translations = TranslatedFields(
name = models.CharField(max_length=30)
)
f = IntegerField()
class B(A):
link_back_to_A = OneToOneField(A, parent_link=True) # specify the name
some_field = ...
见:https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.OneToOneField
【讨论】:
【参考方案2】:b 有两个属性,
b.a_ptr
和 b.a_ptr_id
【讨论】:
不起作用...我应该用 parent_model_name_ 更改那个 a_ 吗? 哦,应该都是小写的。您能否指定该 ptr 记录在哪里?我在 Google 上搜索失败。 不确定它是否有文档记录(所以我想谨慎使用,这可能是改变的公平游戏)但查看子类实例的属性很容易发现以上是关于在Django中使用继承模型获取相关对象的主键的主要内容,如果未能解决你的问题,请参考以下文章
如何获取使用 django bulk_create 创建的对象的主键