2010-05-20 14 views
3

나는이 같은 모델 있습니다장고 - 양식 유효성 검사 오류

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 [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

는, 당신은 그렇지 않으면 UPDATE보다는 INSERT를 수행하려고합니다 저장, 양식을 바인딩 할 때 인스턴스 매개 변수를 제공해야 , 그리고 새 개체 유효성을 검사하지 않습니다 (체크 아웃 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

와우, 그게 다야! 팁을 주셔서 대단히 감사합니다. 내가 장고 문서에 언급 된이 세부 사항을 찾지 못했습니다. –

+0

그곳에 있지만, 때로는 너무 많은 것들이 묻혀있는 경우가 있습니다! 대답에 대한 링크를 추가하겠습니다. – meshantz