У меня есть стол, который я сделал из трех разных моделей. И я хочу их отфильтровать. Но проблема в том, что все примеры, которые я нашел, касались набора запросов и имели только одну модель.

dict = [
    {'name': Model1.objects.get(id=1), 'adress': Model2.objects.get(id=Model1.objects.get(id=1))}, 
    {'name': Model1.objects.get(id=2),},
    ...
]
filter=FilterSet(queryset=???)

Дело в том, что данные от других моделей я получил от Model1. Но я не могу построить таблицу на этой модели, потому что у нее нет внешних ключей к другим 2 моделям.

Другие слова

class Model1(models.Model):
    field1 = models.Charfield()
    field2 = models.Charfield()

class Model2(models.Model):
    field3 = models.Charfield()
    field4 = models.ForeignKey(Model1)
...

Какие-либо предложения? Потому что я не думаю, что создание другой модели - хорошее решение.

1
Blink 5 Окт 2018 в 21:41

1 ответ

Лучший ответ

Вы можете использовать ForeignKey для создания набора запросов, который объединяет обе модели. Предположим, ваши модели выглядят так (я переименовал ваше поле FK для ясности):

class Model1(models.Model):
    field1 = models.Charfield()
    field2 = models.Charfield()

class Model2(models.Model):
    field3 = models.Charfield()
    model1 = models.ForeignKey(Model1, related_name='model2s')

Предположим, вы хотите найти все Model2, у которых есть field3 'foo' и которые были подключены к Model1 с field1 из bar. Вы бы сделали это так:

queryset = Model2.objects.filter(field3='foo', model1__field1='bar')

Вы также можете начать с Model1, используя поле related_name, которое автоматически создается Django. (Существует способ по умолчанию, которым Django будет называть их, если вы не включите имя в ForeignKey, но всегда лучше быть явным.)

Это вернет любой Model1, имеющий field1 'bar' и связанный с any Model2 с field3 из 'foo'.

queryset = Model1.objects.filter(field1='bar', model2s__field3='foo')
0
Dave 17 Окт 2018 в 04:11