Django覆盖模型保存方法将未指定的字段设置为NULL

时间:2015-11-03 10:48:34

标签: python django django-models

解释

我在eiysTblModels中扩展了我的模型,因为我们使用的是django manage.py的inspectdb选项。由于它覆盖了models.py,我们不会触摸models.py,而是将我们的扩展名写入eiysTblModels。

问题

无论如何,当我调用edit_group函数时,它会按照指定正确设置slug和日期,但它会覆盖其他字段,如is_active,isapproved等为NULL,这些字段最初设置为1。

vieys.py

def edit_group(request,group_id):

    groupinfo = request.POST

    group = eiysTblGroup(id = group_id )
    group.name = groupinfo.get('group-name','')

    group.save()

eiysTblModels.py

class eiysTblGroup(TblGroup):
class Meta:
    proxy = True
def save(self, *args, **kwargs):
    self.slug = slugify(self.name)
    if not self.id:
        self.date_created = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        self.isactive = 1
    self.date_last_modified = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    super(TblGroup, self).save(*args, **kwargs)  

models.py

class TblGroup(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=250, blank=True)
    date_created = models.DateTimeField(blank=True, null=True)
    date_last_modified = models.DateTimeField(blank=True, null=True)
    creator = models.ForeignKey(AuthUser, blank=True, null=True)
    group_photo_url = models.CharField(max_length=250, blank=True)
    isactive = models.IntegerField(blank=True, null=True)
    slug = models.CharField(max_length=250, blank=True)
    code = models.IntegerField(blank=True, null=True)
    class Meta:
        managed = False
        db_table = 'tbl_group'

摘要

基本上,我需要的是在保存时自动更新date_last_modified,date_created和slug,并且不要将任何其他部分更新为NULL。

2 个答案:

答案 0 :(得分:1)

显然,我的错误部分是这个:

group = eiysTblGroup(id = group_id )

我不确定我是怎么犯这么愚蠢的错误的。 正确的形式应该是:

group = eiysTblGroup.objects.get(id = group_id )

然后它正常工作......

答案 1 :(得分:0)

我相信你的问题的答案可以在这里找到:

Automatic creation date for django model form objects?

您想要使用它们,因为Django可以自动为您设置创建和修改日期,而无需任何额外的交互。

models.DateTimeField(auto_now_add=True)
models.DateTimeField(auto_now=True)

对于slug,将save()方法缩短为:

def save(self, *args, **kwargs):
    self.slug = slugify(self.name)
    super(eiysTblGroup, self).save(*args, **kwargs)