2017-01-14 79 views
0

例情況如下:的Django模型繼承:在父ForeignKey的,沒有related_name獲得子模型

# 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 

我想通過父類A外鍵來訪問所有相關B對象,但我可以」似乎這樣做。如果我通過A訪問它們,那麼我只是得到通用父類查詢集。謝謝。

回答

3

如果您從一個具體模型繼承,那麼ParentChild模型將會有兩個表(不同於繼承自抽象模型)。 Django會隱式創建一個ChildOneToOneField名爲parent_ptrParent模型,即:

B.objects.filter(a_ptr__form=form) 
# B.objects.filter(a_ptr__form_id=1) 

會給你想要的QuerySet