Django 模型继承:父级上的外键,无法 related_name 访问子模型
Django model inheritance: ForeignKey on parent, no related_name access to child model
示例情况如下:
# models.py
class Form(models.Model):
name = models.CharField()
class A(models.Model):
form = models.ForeignKey(Form)
class B(A):
name = models.CharField()
# view.py
form = Form.objects.get(id=1)
form.a_set.all() # works
form.b_set.all() # doesn't work
我想通过父 class A
外键访问所有相关的 B
对象,但我似乎无法这样做。如果我通过 A
访问它们,那么我只会得到通用父 class 查询集。谢谢。
当您从具体模型继承时,Parent
和 Child
模型将有两个表(与从抽象模型继承不同)。
Django 将隐式创建一个从 Child
到 Parent
的 OneToOneField
模型,命名为 parent_ptr
,因此:
B.objects.filter(a_ptr__form=form)
# B.objects.filter(a_ptr__form_id=1)
会给你想要的 QuerySet
.
示例情况如下:
# models.py
class Form(models.Model):
name = models.CharField()
class A(models.Model):
form = models.ForeignKey(Form)
class B(A):
name = models.CharField()
# view.py
form = Form.objects.get(id=1)
form.a_set.all() # works
form.b_set.all() # doesn't work
我想通过父 class A
外键访问所有相关的 B
对象,但我似乎无法这样做。如果我通过 A
访问它们,那么我只会得到通用父 class 查询集。谢谢。
当您从具体模型继承时,Parent
和 Child
模型将有两个表(与从抽象模型继承不同)。
Django 将隐式创建一个从 Child
到 Parent
的 OneToOneField
模型,命名为 parent_ptr
,因此:
B.objects.filter(a_ptr__form=form)
# B.objects.filter(a_ptr__form_id=1)
会给你想要的 QuerySet
.