2017-01-14 4 views
0

Пример ситуация следующим образом:Джанго модель наследования: 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 

Я хотел бы получить доступ ко всем связанным B объектов с помощью родительского класса A внешнего ключа, но я могу» Кажется, это так. И если я получаю доступ к ним через A, тогда я просто получаю заданный набор родительских классов. Спасибо.

ответ

3

Если вы наследуете конкретную модель, то будут две таблицы (в отличие от унаследованной от абстрактной модели) для моделей Parent и Child. Django будет неявно создать OneToOneField из Child в Parent модели под названием parent_ptr, таким образом:

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

даст вам желаемый QuerySet.