Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/366.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模型更新数据_Python_Django - Fatal编程技术网

Python 基于状态django模型更新数据

Python 基于状态django模型更新数据,python,django,Python,Django,我目前正在创建一个模型,其中一个字段是百分比。我想根据状态更新百分比字段 这是我的模特 class Contact(models.Model): STATUS = ( ('NY','Not Yet'), ('RN','Running'), ('CO','Completed'), ) status = models.CharField(max_length=2, choices=STATUS, default='NY')

我目前正在创建一个模型,其中一个字段是百分比。我想根据状态更新百分比字段

这是我的模特

class Contact(models.Model):

    STATUS = (
        ('NY','Not Yet'),
        ('RN','Running'),
        ('CO','Completed'),
    )


    status = models.CharField(max_length=2, choices=STATUS, default='NY')
    percentage = models.FloatField()

    if status == 'CO':
         percentage = 100
    else:
         percentage = 0

这不起作用或不保存。

覆盖模型的保存方法,并将逻辑放在其中

class Contact(models.Model):

    STATUS = (
        ('NY','Not Yet'),
        ('RN','Running'),
        ('CO','Completed'),
    )


    status = models.CharField(max_length=2, choices=STATUS, default='NY')
    percentage = models.FloatField()


    def save(self, *args, **kwargs):
        if self.status == 'CO':
            self.percentage = 100
        else:
            self.percentage = 0
        super(Contact, self).save(*args, **kwargs) # Call the "real" save() method.

重写模型的save方法并将逻辑放在其中

class Contact(models.Model):

    STATUS = (
        ('NY','Not Yet'),
        ('RN','Running'),
        ('CO','Completed'),
    )


    status = models.CharField(max_length=2, choices=STATUS, default='NY')
    percentage = models.FloatField()


    def save(self, *args, **kwargs):
        if self.status == 'CO':
            self.percentage = 100
        else:
            self.percentage = 0
        super(Contact, self).save(*args, **kwargs) # Call the "real" save() method.

如果您只是为了显示目的而使用
百分比
字段,则不需要将其设置为实际字段。我会这样做:

class Contact(models.Model):
    STATUS = (
        ('NY','Not Yet'),
        ('RN','Running'),
        ('CO','Completed'),
    )

    status = models.CharField(max_length=2, choices=STATUS, default='NY')

    @property
    def percentage(self):
        if self.status == 'CO':
            return 100
        else:
            return 0

但是如果你真的想让它成为一个字段,你可以像Kapil Sachdev的答案那样做。

如果你只是为了显示而使用
百分比
字段,你不需要让它成为一个真正的字段。我会这样做:

class Contact(models.Model):
    STATUS = (
        ('NY','Not Yet'),
        ('RN','Running'),
        ('CO','Completed'),
    )

    status = models.CharField(max_length=2, choices=STATUS, default='NY')

    @property
    def percentage(self):
        if self.status == 'CO':
            return 100
        else:
            return 0

但是如果你真的想让它成为一个领域,你可以像Kapil Sachdev的答案那样做。

save
方法中,
status
应该是
self.status
percentage
应该是
self.percentage
Oh Yes@Nick,谢谢:)。编辑了我的答案。非常感谢。这正是我一直在寻找的。我可以使用不同的方法名称吗?因为
def save(self)
与我使用的其他方法有冲突。您正在覆盖模型的
save()
方法,并且
模型的
save()
方法只能有一个。冲突在哪里?在
save
方法中,
status
应该是
self.status
percentage
应该是
self.percentage
Oh Yes@Nick,谢谢:)。编辑了我的答案。非常感谢。这正是我一直在寻找的。我可以使用不同的方法名称吗?因为
def save(self)
与我使用的其他方法有冲突。您正在覆盖模型的
save()
方法,并且
模型的
save()
方法只能有一个。冲突在哪里?这很好。但是对于这个问题,我将使用Kapil Sachdev的答案,但是你的答案对我的另一个问题非常有帮助。非常感谢。这太好了。但是对于这个问题,我将使用Kapil Sachdev的答案,但是你的答案对我的另一个问题非常有帮助。多谢各位