功能保存模型django

时间:2018-02-27 17:58:13

标签: python django model django-admin

有一个应用程序模型。其含义非常简单,作者提交申请,网站管理员指定承包商执行,在完成收到的申请后完成。一切似乎都很好,创建了应用程序模型,确保在管理员选择承包商后,应用程序立即收到关闭状态。

但是,当管理员关闭应用程序(状态“已完成”)时,我无法应对这一问题,然后应用程序未获取状态已完成,因为艺术家因为保存功能而被分配给它该模型。

如果指定承包商参与此申请,如何使申请状态完整?我提前请你原谅我对这个问题的介绍,我还是个初学者。非常感谢所有可以帮助的人。

models.py

class Application(models.Model):
    STATUS_CHOICES = (
        ('In_the_work', 'В работе'),
        ('New', 'Новая'),
        ('Complited', 'Завершена')
    )

 author = models.ForeignKey('auth.User', related_name = '+', verbose_name = 'Автор')
 title = models.CharField(max_length=50, verbose_name = 'Заголовок')
 text = models.TextField(verbose_name = 'Описание проблемы')
 room = models.CharField(max_length = 4, verbose_name = 'Кабинет')
 published_date = models.DateField(blank=True, null=True, default = 
 datetime.datetime.now, verbose_name = 'Дата')
 status = models.CharField(max_length=15, choices=STATUS_CHOICES, 
 default='Новая', verbose_name = 'Статус')
 owner = models.ForeignKey('auth.User', related_name = '+', null = True, 
 blank = True, limit_choices_to={ 'groups__name': 'Техническая поддержка'}, 
 verbose_name = 'Исполнитель') 

def save(self, *args, **kwargs):
    if self.owner != None:
        self.status = 'In_the_work'

    super(Application, self).save(*args, **kwargs)

1 个答案:

答案 0 :(得分:1)

我不确定你对一个"艺术家"的意思被分配到申请表。

如果您的意思是指定承包商,我认为您指的是指定一位"所有者" (所有者字段值)到应用程序模型。如果是这种情况,则错误在于,在保存方法中,您检查的所有者​​是否与None不同,在这种情况下,您始终会将状态覆盖为" In_the_work"。

所以也许解决方案可能是这样的:

def save(self, *args, **kwargs):
    if self.status != 'Complited' and self.owner is not None:
        self.status = 'In_the_work'
    super(Application, self).save(*args, **kwargs)

通过这种方式,如果状态与首先的complited不同,则只覆盖状态,而不是每次所有者都不是None。

谢谢。