Python Updateview在更新时创建新记录
我有一个主键为slugfield的模型 我有updateview,当我点击更新按钮时,它会创建新对象 例如: 旧记录:标题=数据1 更新条目:标题=数据2 输出:Python Updateview在更新时创建新记录,python,django,Python,Django,我有一个主键为slugfield的模型 我有updateview,当我点击更新按钮时,它会创建新对象 例如: 旧记录:标题=数据1 更新条目:标题=数据2 输出: 数据2 数据1 models.py class mymodel(model.Models): slug = models.SlugField(max_length=200, unique=True, primary_key=True, auto_created=False) title = models.CharFi
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
url.py
path('myupdate/<slug:slug>/edit/', myupdateview.as_view(), name='myupdate')
path('myupdate//edit/',myupdateview.as_view(),name='myupdate')
问题在于您在models.py中使用的自定义save()方法
当发生更新时,它也会触发。
您可以通过确定对象是否为新对象来解决此问题
解决方案:
self.pk is None:
在新模型对象内返回True,除非该对象的主键为UUIDField。您也可以使用模型信号来设置slug 例如,信号
post\u save
您为什么将slug作为主键?因为project@c.grey所以问题是,当使用更新视图保存时,它正在创建一个新对象?是的,在更新它时创建新@shekharso,您只需在save方法中执行一个if条件,即如果slug存在,则无需更改slug,或者如果它是一个新对象,则创建slug