Django - 表单验证错误

时间:2010-05-20 15:21:28

标签: django django-models django-templates django-forms

我有一个像这样的模型

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中的异常:无法更改实体,因为数据未验证。

我一直在试图弄清楚为什么会发生这种情况,但无法确切地指出确切的问题。我可以在管理界面中更改我的实体就好了。如果有人对此有所了解,我将不胜感激!

谢谢, 伊戈尔

1 个答案:

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

当然,您希望对查看实体的方式更加强大。

相关问题