Django-tables2 и Django-фильтры: фильтрация списка диктов - PullRequest
0 голосов
/ 05 октября 2018

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

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 Ответ

0 голосов
/ 17 октября 2018

Вы можете использовать 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 s, которые имели 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')
...