Python django模型字段的不同setter和getter
我在django中有一个空布尔mysql字段:Python django模型字段的不同setter和getter,python,django,Python,Django,我在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" 正确的方法是什么
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"
我的建议是将属性重命名为文本字段,例如:
@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)
这就是为什么我建议使用更明确的第一种方法