繁体   English   中英

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

[英]How can I implement choice field in django model?

我想在 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 和 For Sale 必须具有in_loft=True和 Lost, Dead 必须具有in_loft=False 有没有人可以回答这个问题? 有没有另一种方法(也许更好)来设置鸽子状态并在以后参考它? 谢谢!

由于您的in_logt取决于PigeonStatus模型的status字段的值,因此无需创建 in_loft 字段。 更好的 Pythonic 方法是在PigeonStatus使用自定义方法(带有属性装饰器)来获取 in_logt 的值。 然后,您可以按照您的建议从 PigeonStatus 的实例中调用 in_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'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM