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



我想在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字段。一种更好的Python方法是在PigeonStatus中有一个自定义方法(带有属性decorator(来获取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'

最新更新