2010-05-20 85 views
3

我有一个模型这样的:的Django - 表单验证错误

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'],u'entity_name':[u'AJ McLean'],u'status':[u'Checked Out'],u'date_matched_on':[u'5/20/2010 10:57 AM']}

form.save()会抛出这个错误:

Exception in photo_match: The Entity could not be changed because the data didn't validate.

我一直在试图弄清楚为什么会发生这种情况,但无法确定确切的问题。我可以在管理界面中更改我的实体。如果有人有这方面的线索,我将不胜感激!

感谢, 伊戈尔

回答

5

如果你想更新实体已保存,那么你需要在绑定的形式提供一个实例参数,否则保存时将尝试执行INSERT而不是UPDATE ,并且新对象不会验证(请查看django文档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() 

你会想一点更强大的你查找实体,当然的方式。

+0

哇,那就是它!非常感谢你的提示。我没有在django文档中找到这个细节。 – 2010-05-20 16:13:23

+0

它在那里,但我发现一些细节往往有时也被埋葬!我会添加一个链接到答案。 – meshantz 2010-05-20 16:18:18