Updateview在更新时创建新记录

时间:2019-06-25 11:56:27

标签: python django

我有以slugfield作为主键的模型。

当我按下更新按钮时,我拥有updateview,它会创建新对象。

例如:

旧记录:标题=数据1

更新条目:标题=数据2

输出

  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

urls.py

path('myupdate/<slug:slug>/edit/', myupdateview.as_view(), name='myupdate')

2 个答案:

答案 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