首页 > 解决方案 > 如何简单地获取模型的 BooleanField 如果且只有一个模型在 Django 中为真,则该模型为真?

问题描述

我有以下模型,它有两个布尔字段。由于我的逻辑,它们在任何时候都不会是真的。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

标签: django

解决方案


像这样的东西可能是使用元来获取字段的名称:

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)

推荐阅读