在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_ptrb.a_ptr_id

【讨论】:

不起作用...我应该用 parent_model_name_ 更改那个 a_ 吗? 哦,应该都是小写的。您能否指定该 ptr 记录在哪里?我在 Google 上搜索失败。 不确定它是否有文档记录(所以我想谨慎使用,这可能是改变的公平游戏)但查看子类实例的属性很容易发现

以上是关于在Django中使用继承模型获取相关对象的主键的主要内容,如果未能解决你的问题,请参考以下文章

如何获取使用 django bulk_create 创建的对象的主键

Django:如何在urlpatterns中访问其他模型的主键?

在 django 中获取继承的模型对象

django定义模型类

Django使用“通过”关系表从模型中获取所有相关对象

如何在 C# 中获取 DataGridView 中的主键?