我目前正在使用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()
答案 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()
然后您可以完全相同地使用您的视图。
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'