У меня есть две Django модели следующим образом:
class Event(models.Model):
name = models.CharField()
class EventPerson(models.Model):
event = models.ForeignKey('Event',on_delete='CASCADE',related_name='event_persons')
person_name = models.CharField()
Если событие существует в базе данных, оно будет иметь ровно два связанных с ним объекта EventPerson.
Что Я хочу сделать, это определить, существует ли Событие с данным именем И, которое имеет данный набор из двух человек (EventPersons) в этом событии. Возможно ли это сделать в одном Django запросе?
Я знаю, что мог бы написать python код, подобный этому, чтобы проверить, но я надеюсь на что-то более эффективное:
def event_exists(eventname,person1name,person2name):
foundit=False
for evt in Event.objects.filter(name=eventname):
evtperson_names = [obj.person_name in evt.event_persons.all()]
if len(evtperson_names) == 2 and person1name in evtperson_names and person2name in evtperson_names:
foundit=True
break
return foundit
Или было бы лучше провести рефакторинг моделей таким образом, чтобы Event имел в качестве своих полей поля person1name и person2name, такие как:
class Event(models.Model):
name = models.CharField()
person1name = models.CharField()
person2name = models.CharField()
Проблема в том, что не существует естественного порядка для person1 и person2, ie если это "Боб" и "Салли", то у нас могут быть person1name = "Bob" и person2name = "Sally" или у нас могут быть person1name = "Sally" и person2name = "Bob".
Предложения