Django: применение функции filter () дает NameError - PullRequest
0 голосов
/ 27 февраля 2019
Class Connect(models.Model):
    connection = models.Charfield(max_length=120)

Значения поля 'connection' объектов модели 'Connect' могут быть Chat, Video или Call.

Ниже приведена моя модель Visitor, которая имеет connecting_medium as поле многие ко многим .

Class Visitor(models.Model):
    name = models.CharField(max_length=120)
    connecting_medium = models.ManyToManyField('Connect')

Что я знаю, что если v является объектом модели Visitor, то следующая строка кода выдаст список соединений дляэтот конкретный посетитель v.

connection_list=list(v.connecting_medium.values_list('connection',flat=True))    

Теперь мой мотив - получить все те Visitor объектов, которые имеют Chat в connection_list.Я написал следующий код, но он, похоже, не работает. Возникает ошибка, что:

имя 'connection_medium' не определено.

def my_view(request):
    context['list_no'] = Visitor.objects.filter('Chat' in list(connecting_medium.values_list('connection',flat=True)))
        #--------------------rest-of-the-code----------------------------#

PS: Выше приведен только пример кода. Мне запрещено публиковать исходный код проекта компании. Но ситуация именно такая.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Следующее извлекает все Посетители объекты с Соединением , чье соединение Чат :

Visitor.objects.filter(connecting_medium____connection='Chat')

Джанго предлагаетмощный и интуитивно понятный способ «следить» за отношениями в поисках ... source .

0 голосов
/ 27 февраля 2019

Это не то, как вы пишете запросы в Django.Вам необходимо использовать ключевые аргументы.

В этом случае используйте синтаксис с двойным подчеркиванием для обхода отношения:

Visitor.objects.filter(connecting_medium__connection='Chat')
...