Python Updateview在更新时创建新记录

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

我有一个主键为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.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