【问题标题】:Getting the primary key of related object with inherited model in Django在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吗?

【问题讨论】:

    标签: django inheritance models


    【解决方案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 上搜索失败。
      • 不确定它是否有文档记录(所以我想谨慎使用,这可能是改变的公平游戏)但查看子类实例的属性很容易发现
      猜你喜欢
      • 2011-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-15
      • 2012-05-07
      • 2017-03-13
      • 2016-03-02
      相关资源
      最近更新 更多