Django模型字段的不同设置方法和获取方法

时间:2018-10-25 19:30:01

标签: 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"

正确的方法是(1)将数据设置为布尔值;但是然后(2)在调用它时会收到文本吗?例如:

>>> invoice = Invoice()
>>> invoice.status = True
>>> invoice.save()
>>> invoice.status
"Paid"

1 个答案:

答案 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)

这就是为什么我建议更明确的第一种方法。