我在Django中有一个空的布尔mysql字段:
class Invoice(models.Model):
...
status = models.NullBooleanField()
但是,当我调用它时,我希望它返回以下内容:
@property
def status(self):
return "Pending" if self.status is None else "Paid" if self.status == 1 else "Failed"
正确的方法是(1)将数据设置为布尔值;但是然后(2)在调用它时会收到文本吗?例如:
>>> invoice = Invoice()
>>> invoice.status = True
>>> invoice.save()
>>> invoice.status
"Paid"
答案 0 :(得分:0)
我的建议是将属性重命名为文本字段,例如:
@property
def status_text(self):
return "Pending" if self.status is None else "Paid" if self.status == 1 else "Failed"
另一种选择是使用以下方法:
class User(models.Model):
_status = models.NullBooleanField(db_column='status')
@property
def status(self):
return "Pending" if self.status is None else "Paid" if self.status == 1 else "Failed"
@first_name.setter
def status(self, value):
self.status = status
但是,第二种方法并不是万能的,因为您将无法执行以下操作:
User.objects.filter(status=True)
这就是为什么我建议更明确的第一种方法。