Как в Django получить булево поле модели, которое является True, если и только оно одно может быть истинным?
У меня есть следующая модель, в которой есть два булевых поля. По моей логике, они не будут оба истинными в любой момент времени. Как я могу получить поле, которое является True
простым прямым способом?
class Vote(models.Model):
poller = models.ForeignKey(Poller, on_delete=models.CASCADE, related_name='vote')
user = models.ForeignKey(Account, on_delete=models.CASCADE)
created_on = models.DateTimeField(auto_now_add=True)
poller_choice_one_vote = models.BooleanField(default=False)
poller_choice_two_vote = models.BooleanField(default=False)
def __str__(self):
return f'Vote by {self.user}'
Вот как я это делаю сейчас:
voted_for = Vote.objects.get(poller_id=poller_id, user=request.user)
is_true = voted_for.poller_choice_one_vote
is_also_true = voted_for.poller_choice_two_vote
if is_true:
voted_for = voted_for.poller_choice_one_vote
elif is_also_true:
voted_for = voted_for.poller_choice_two_vote
else:
pass
Возможно, что-то вроде этого, чтобы использовать мета для получения имени поля:
voted_for = Vote.objects.get(poller_id=poller_id, user=request.user)
one = voted_for.poller_choice_one_vote
two = voted_for.poller_choice_two_vote
if one:
voted_for = Vote._meta.get_field(one)
elif two:
voted_for = Vote._meta.get_field(two)