Я пытаюсь создать проверочный тест, в котором пользователь сопоставляется только с programs
, для которого он отвечает всем требованиям.Пользовательский ввод - это словарь, например:
user_dict = [{location: CA, gender: male, skill: crafts}]
У programs
есть requirements
, как показано в следующих моделях:
class Program(models.Model):
name = models.CharField()
requirements = models.ManyToManyField("Requirement")
class Requirement(models.Model):
name = models.CharField()
status = models.CharField()
Я хотел бы запрос получитьвсе programs
, для которых встречаются все связанные с ними requirements
.Например, если program
с именем camp counselor
имеет только следующие 2 требования, связанные с ним:
[{'name': 'location', 'status': 'CA'}, {'name': 'skill', 'status': crafts}]
Он будет получен, поскольку все его requirements
соответствуют словарю пользователя.Если бы это было 3-е requirement
:
[{'name': 'gender', 'status': 'female'}]
Тогда его бы не восстановили.Однако, если бы эти 3 requirement
status
были male
, они бы соответствовали и были извлечены.
В настоящее время я перебираю каждый program
и проверяю, есть ли совпадение, ноЯ чувствую, что должен быть лучший способ выполнить это:
for p in program:
for r in p.requirements.all():
if user_dict[r.name] == r.status:
print "Match"
else:
print "No Match"