форма django пропускает проверку модели?

#django #django-models #django-forms

#django #django-модели #django-forms

Вопрос:

Недавно я загрузил Pinax project 0.7, чтобы посмотреть, что я могу применить к своему собственному проекту. В частности, я запустил Pinax и посмотрел приложение закладок, которое Pinax применил к себе. Я скопировал приложения-закладки и их зависимости в свои собственные. Однако Pinax работает на Django 1.0.4, а мой был 1.2.4, и в проверке формы есть некоторые ошибки. Ниже приведены фрагменты из приложения «Закладки»:

 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)

    tags = TagField()
 

Форма:

 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', 'tags', '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
 

Переданные параметры были (<QueryDict: {u'url': [u'amazon.com'], u'note': [u'foo'], u'description': [u'bar'], u'tags': [u'']}>,) , но не вызвали ошибку проверки модели в 1.0.4. Итак, как я могу внести минимальные коррективы, на мой взгляд, возможно, чтобы пропустить проверку модели, чтобы учесть это различие?

Комментарии:

1. Не копируйте и не вставляйте код, который вы не понимаете.

2. «Pinax работает на Django 1.0.4»? Нет, это определенно не так. Он работает на последней версии Django — см. requirements.txt файл: github.com/pinax/pinax/blob/master/pinax/projects/basic_project /…

3. @DanielRoseman, я загрузил «последнюю стабильную версию» с pinaxproject.com и требования, заявленные Django == 1.0.4. Я не пробовал последнюю версию, так как кто-то из группы пользователей Pinax сказал, что версия для разработки была глючной.