如何在Django模型中实现选择字段?

2024-06-01 20:05:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在django开发一个鸽子应用程序,我的鸽子模型有状态字段。 为此,我必须定义另一个名为Status的模型来存储我的状态

我的模型

class PigeonStatus(models.Model):
    STATUSES = [
        ('Activ', 'Activ'),
        ('Lost', 'Lost'),
        ('Dead', 'Dead'),
        ('For Sale', 'For Sale')
        ]

    status = models.CharField(max_length=15, choices=STATUSES, unique=True)
    in_loft = models.BooleanField('In loft?')

    def __str__(self):
    return self.status

class Pigeon(models.Model):
    pigeon_id = models.AutoField(primary_key=True)
    year = models.CharField(max_length=4, null=False, blank=False)
    band = models.CharField(max_length=25, null=False, blank=False, unique=True)
    ...
    status = models.ForeignKey(PigeonStatus, on_delete=models.CASCADE, null=False, blank=False)

我的问题是如何为每个状态设置布尔值?我想这样查询:Pigeon.status.in_loft = true。 从选项中,Activ和待售必须有in_loft=True和Lost,Dead必须有in_loft=False。 有人能回答这个问题吗?是否有其他方法(可能更好)来设置鸽子状态并稍后参考? 谢谢


Tags: in模型falsetruemodels状态statuslength
1条回答
网友
1楼 · 发布于 2024-06-01 20:05:47

由于in_logt依赖于PigeonStatus模型的status字段的值,因此无需创建in_loft字段。更好的pythonic方法是在PigeonStatus中有一个自定义方法(带有属性装饰器)来获取in_logt的值。然后,您可以按照您的建议从鸽子状态的实例调用_loft

下面是示例代码:

class PigeonStatus(models.Model):
    STATUSES = [
        ('Activ', 'Activ'),
        ('Lost', 'Lost'),
        ('Dead', 'Dead'),
        ('For Sale', 'For Sale')
        ]

    status = models.CharField(max_length=15, choices=STATUSES, unique=True)

    @property
    def in_loft(self):
        return self.status == 'Activ' or self.status == 'For Sale'

相关问题 更多 >