我有以slugfield作为主键的模型。
当我按下更新按钮时,我拥有updateview,它会创建新对象。
例如:
旧记录:标题=数据1
更新条目:标题=数据2
输出:
models.py
class mymodel(model.Models):
slug = models.SlugField(max_length=200, unique=True, primary_key=True, auto_created=False)
title = models.CharField(max_length=200)
def __str__(self):
return self.title
def save(self, *args, **kwargs):
self.slug = slugify(self.title)
super(mymodel, self).save(*args, **kwargs)
forms.py
class myupdateform(forms.ModelForm):
class Meta:
model = mymodel
fields = ('__all__')
views.py
class myupdateview(generic.UpdateView):
template_name = 'update.html'
model = mymodel
context_object_name = 'mymodel_obj'
form_class = myupdateform
urls.py
path('myupdate/<slug:slug>/edit/', myupdateview.as_view(), name='myupdate')
答案 0 :(得分:1)
问题在于您在模型中使用的自定义save()方法。 当发生更新时,它也会触发。 您可以通过确定对象是否新来解决
解决方案:
self.pk is None:
在新的Model对象中返回True,除非该对象的主键为UUIDField。
答案 1 :(得分:1)
还可以使用模型信号来设置弹头。
例如信号post_save
。
https://docs.djangoproject.com/en/2.2/ref/signals/#django.db.models.signals.post_save