Почему в django при объединении двух таблиц имя другой модели рассматривается как имя поля в фильтре?

Я новичок в django.Я застрял в странной проблеме, которая заключается в том, что при объединении двух таблиц имя внешней модели рассматривается как имя поля, даже если я использую __ подчеркивание, и я получаю ошибку. Вот мои две модели :-

 class TD_FD(models.Model):
   id = models.BigAutoField(primary_key=True,db_index=True)
   identity=models.CharField(max_length=25,unique=True,db_index=True)
   del_status=models.CharField(max_length=6,default='na',db_index=True)
   status=models.CharField(max_length=16,db_index=True)
   primary_id=models.ForeignKey('all_scheme',to_field='identity',
   db_column='primary_id'
   ,on_delete=models.PROTECT,max_length=25,
   db_index=True)
   
   def __str__(self):
     return self

 class all_scheme(models.Model):
   id = models.BigAutoField(primary_key=True,db_index=True)
   identity=models.CharField(max_length=25,unique=True,db_index=True)
   del_status=models.CharField(max_length=6,default='na',db_index=True)
   status=models.CharField(max_length=16,db_index=True)
   scheme_name=models.CharField(max_length=150,db_index=True)
   branch_id=models.CharField(max_length=25,db_index=True)
   
   def __str__(self):
     return self

    ```
This is my query
`deposit_data=TD_FD.objects.filter(all_scheme__branch_id=branch_id).values()`
But .filter('all_scheme__branch_id' treated as field name.Why? 

   

Модель TD_FD не имеет ничего при вызове all_scheme. Однако вы можете попробовать вызвать это:

deposit_data=TD_FD.objects.filter(primary_id__branch_id=branch_id).values()

Сначала необходимо указать поле или отношение. Поскольку ваш TD_FD имеет отношение ForeignKey к all_scheme, которое вы назвали primary_id, то вы должны использовать это имя. Но фильтрация таким образом кажется бессмысленной, потому что это ВСЕГДА будет один объект, потому что это ForeignKey (ManyToOne отношение).

Читайте больше об отношениях Django.

Вернуться на верх