使用ModelForm在Django中使用唯一字段更新模型

时间:2014-04-13 14:35:20

标签: django django-forms

当我尝试更新现有记录时,我收到“值已存在”错误。

示例:     我在数据库中定义了5个产品。现在我要编辑第4条记录。我用pk值调用“product_edit”。现在,我正在更改产品名称字段并保持产品编号字段不变。当我点击提交时,产品编号输入字段上方会显示一条错误消息。 “具有此产品编号的产品已存在”。我怎么能避免这个?

models.py

class Product(models.Model):
productname = models.CharField("Product Name", max_length=200, unique=True)
productnumber = models.CharField("Product Number", max_length=50, unique=True)

def __unicode__(self):
    return self.productname

forms.py

class ProductForm(forms.ModelForm):
class Meta:
    model = Product
    fields = ['productname', 'productnumber']

views.py

def product_edit(request, pk, template_name='dictionary/prod/prod_add.html'):
product = get_object_or_404(Product, pk=pk)
form = ProductForm(request.POST or None, instance=product)
if form.is_valid():
    form.save()
    return HttpResponseRedirect('dictionary/prod/prod_list.html')
return render(request, template_name, {'form': form})

urls.py

url(r'^edit/(?P<pk>\d+)$', views.product_edit, name='product_edit'),

1 个答案:

答案 0 :(得分:0)

终于开始工作了。在视图中将pk更改为id,创建了一个新的update.html以进行更新。将表单操作url留空,因为它填充并提交到同一视图。