2010-05-20 81 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