Django - 表单验证错误

Igo*_*sky 3 django django-templates django-models 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'
Run Code Online (Sandbox Code Playgroud)

我也有这样的观点:

def photo_match(request):
''' performs an update in the db when a user chooses a photo '''

    form = EntityForm(request.POST)
    form.save()
Run Code Online (Sandbox Code Playgroud)

我的EntityForm看起来像这样:

class EntityForm(ModelForm):
    class Meta:
        model = Entity
Run Code Online (Sandbox Code Playgroud)

我的模板的表单将POST返回到具有以下值的视图:
{u'username':[u'admin'],u'entity_parent':[u'PERSON'],u'entity_id':[u'152097' ],'u'photo_id':[u'2200734'],u'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中的例外:无法更改实体,因为数据未验证.

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

谢谢,伊戈尔

mes*_*ntz 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()
Run Code Online (Sandbox Code Playgroud)

当然,您希望对查找实体的方式更加强大一些.