Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django模型字段的不同setter和getter_Python_Django - Fatal编程技术网

Python django模型字段的不同setter和getter

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" 正确的方法是什么

我在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"

我的建议是将属性重命名为文本字段,例如:

@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)
这就是为什么我建议使用更明确的第一种方法