解释
我在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。
答案 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)