2010-07-02 2 views
0

내 프로젝트 중 하나에 django-bookmarks를 사용하고 있으며 최근 Django 1.2.1로 업데이트했습니다. 양식 제출이 업데이트 이후에 유효성 검사를하지 않는 것으로 나타났습니다. 이것이 Django v1.1.1에서 작동하고 있다는 것을 확인 했으므로 새 버전과 양식 필드 유효성 검사가 다릅니다. django 폼 검증 v1.2.1에서

은 떨어져 구축 forms.py 모델입니다 :

class BookmarkInstance(models.Model): 

    bookmark = models.ForeignKey(Bookmark, related_name="saved_instances", verbose_name=_('bookmark')) 
    user = models.ForeignKey(User, related_name="saved_bookmarks", verbose_name=_('user')) 
    saved = models.DateTimeField(_('saved'), default=datetime.now) 

    description = models.CharField(_('description'), max_length=100) 
    note = models.TextField(_('note'), blank=True) 

에서 POST 처리 뷰 :

if request.method == "POST": 
    bookmark_form = BookmarkInstanceForm(request.user, request.POST) 
    if bookmark_form.is_valid(): 
     bookmark_instance = bookmark_form.save(commit=False) 
     bookmark_instance.user = request.user 
     bookmark_instance.save() 
     bookmark = bookmark_instance.bookmark 
     ... 

그리고 forms.py :

class BookmarkInstanceForm(forms.ModelForm): 

    url = forms.URLField(label = "URL", verify_exists=True, widget=forms.TextInput(attrs={"size": 40})) 
    description = forms.CharField(max_length=100, widget=forms.TextInput(attrs={"size": 40})) 
    redirect = forms.BooleanField(label="Redirect", required=False) 
    tags = TagField(label="Tags", required=False) 

    def __init__(self, user=None, *args, **kwargs): 
     self.user = user 
     super(BookmarkInstanceForm, self).__init__(*args, **kwargs) 
     # hack to order fields 
     self.fields.keyOrder = ['url', 'description', 'note', 'redirect'] 

    def clean(self): 
     if 'url' not in self.cleaned_data: 
      return 
     if BookmarkInstance.objects.filter(bookmark__url=self.cleaned_data['url'], user=self.user).count() > 0: 
     raise forms.ValidationError(_("You have already bookmarked this link.")) 
     return self.cleaned_data 

    ...  

    def save(self, commit=True): 
     self.instance.url = self.cleaned_data['url'] 
     return super(BookmarkInstanceForm, self).save(commit) 

    class Meta: 
     model = BookmarkInstance 
     #fields = ('url', 'description', 'note', 'redirect') 

을 pdb를 사용하여 BookmarkInstance의 외래 키 값이 비어 있음을 확인 했으므로 모든 필드가 있기 때문에 is_valid()가 false를 반환합니다. 확인하지 못했습니다.

외부 키 매개 변수를 명시 적으로 전달하기 위해 함수를 수정해야합니까? v1.1.1에서와 같이 외래 키 값을 자동으로 전달하면 안됩니까?

답변

0

나는 실제로 그것을 단지 풀었다. 그리고 그것은 당황하게 쉬웠다. 다음을 주석 처리하십시오 :

#fields = ('url', 'description', 'note', 'redirect') 

필드에 명시 적으로 명시해야하는 내용입니다. 이것은 Django v1.1.1에서 효과가 있었고 v1.2.1에서 새로운 형식 유효성 검사가 명시 적으로 필요하다고 생각합니다.