![](/img/trans.png)
[英]How can I change the value of a Django model field when a particular choice is selected?
[英]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.