django创建新对象而不是更新

时间:2018-04-25 23:58:39

标签: django model

我目前正在使用django在新闻网站上工作,我在更新类别时遇到了问题。

我创建了一个视图,它使用表单获取旧类别名称和新类别。

这是我的代码

def update_category(request):

    if request.method=='POST':
        old_name=request.POST.get('old_name').strip() # get old name
        new_name=request.POST.get('new_name').strip() # get new name
        categorie=Category.objects.get(title=old_name) # get category by title (pk)
        categorie.title=new_name # update the title
        categorie.save() # save to the database

return HttpResponseRedirect('/admin/Category_Management)

例如,如果我尝试将“技术”类别更改为“计算机科学”,django会创建一个名为“计算机科学”的新类别,而不是更新“技术”

这是我的类别模型

class Category(models.Model):
    class Meta:
        verbose_name='Catégorie'
        verbose_name_plural='Catégories'

    title=models.CharField(primary_key=True,max_length=50,null=False,blank=False,verbose_name='Titre')

    def __str__(self):
        return self.title.title()

1 个答案:

答案 0 :(得分:0)

你为什么设置标题primary_key=True?有什么特别的原因吗?

Django自动创建主键(pk)。点击此处(https://docs.djangoproject.com/en/2.0/topics/db/models/#automatic-primary-key-fields

将您的模型更改为以下

class Category(models.Model):
    class Meta:
        verbose_name='Catégorie'
        verbose_name_plural='Catégories'

    title=models.CharField(max_length=50,null=False,blank=False,verbose_name='Titre')

    def __str__(self):
        return self.title.title()

然后您可以完全相同地使用您的视图。

P.S。

pk不应该改变。如果更改pk并再次保存,它将保存到其他模型对象。例如,

category = Category.objects.get(title='test')
category.id = None
category.title = 'new test'
category.save() # it will make another category, with title 'new test'