我有一个像这样的模型:
class Entity(models.Model):
entity_name = models.CharField(max_length=100)
entity_id = models.CharField(max_length=30, primary_key=True)
entity_parent = models.CharField(max_length=100, null=True)
photo_id = models.CharField(max_length=100, null=True)
username = models.CharField(max_length=100, null=True)
date_matched_on = models.CharField(max_length=100, null=True)
status = models.CharField(max_length=30, default="Checked In")
def __unicode__(self):
return self.entity_name
class Meta:
app_label = 'match'
ordering = ('entity_name','date_matched_on')
verbose_name_plural='Entities'
我也有这样的视图:
def photo_match(request):
''' performs an update in the db when a user chooses a photo '''
form = EntityForm(request.POST)
form.save()
我的EntityForm看起来像这样:
class EntityForm(ModelForm):
class Meta:
model = Entity
我的模板表单将POST返回到具有以下值的视图:
{u'username':[u'admin'],u'entity_parent':[u'PERSON'],u'entity_id':[u'152097'],u'photo_id':[u'2200734'],你'entity_name':[u'AJ McLean'],u'status':[u'Checked Out'],u'date_matched_on':[u'5 / 20/2010 10:57 AM']}
并且form.save()抛出此错误:
photo_match中的异常:无法更改实体,因为数据未验证。
我一直在试图弄清楚为什么会发生这种情况,但无法确切地指出确切的问题。我可以在管理界面中更改我的实体就好了。如果有人对此有所了解,我将不胜感激!
谢谢, 伊戈尔
答案 0 :(得分:5)
如果您要更新的实体已经保存,那么您需要在绑定表单时提供实例参数,否则save将尝试执行INSERT而不是UPDATE,并且新对象将不会验证(查看django docs here)。
尝试:
def photo_match(request):
''' performs an update in the db when a user chooses a photo '''
entity = Entity.objects.get(pk=request.POST['entity_id'])
form = EntityForm(request.POST, instance=entity)
form.save()
当然,您希望对查看实体的方式更加强大。