내 프로젝트 중 하나에 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에서와 같이 외래 키 값을 자동으로 전달하면 안됩니까?