Как отфильтровать результаты запроса, передавая строку как поле - PullRequest
0 голосов
/ 06 мая 2019

Мне нужно добавить mail_d_list, только если в модели установлен флаг.

Я вызываю эту функцию, когда airport_code уже поступает от пользователя. Теперь я хотел бы добавить пользователя в список адресов электронной почты, если для него выбран флаг или нет.

Каждый пользователь в модели имеет шесть логических флагов, по одному флагу для каждого возможного отчета. Текст для флага находится в середине.

Я пробовал .get() и .filter()

Models.py

class Aerodrome(models.Model):
    ''' Aerodrome model for storing three-letter airport codes iata,
    airport description and the database partition informtion. '''
    iata = models.CharField(max_length=3, primary_key=True)
    customer = models.CharField(max_length=5)
    name = models.CharField(max_length=100)
    partition_code = models.CharField(max_length=6)

class DistributionList(models.Model):
    ''' List of all email addresses that are to receive
    automated emails from the system '''
    email = models.CharField(max_length=40, primary_key=True)
    name = models.CharField(max_length=40)
    receive_emails = models.BooleanField()
    receives_report = models.ManyToManyField(Aerodrome)

script.py

for user in DistributionList.objects.filter(receives_report__iata=airport_code):
    mail_d_list.append(user.email)

1 Ответ

1 голос
/ 06 мая 2019

Это определенно неправильный подход.

Аэродромы уже определены в отдельной модели. Вы должны определить ManyToManyField как отношение между ними, а не динамически определять поля в вашей модели DistributionList. Тогда ваш сценарий может фильтроваться по этим отношениям.

...