всегда требуется ModelChoiceField? - PullRequest
10 голосов
/ 12 апреля 2010

У меня есть модель

class Article(models.Model):
    .
    .
    language = models.ForeignKey(Language, help_text="Select the article's language")
    parent_article = models.ForeignKey('self', null=True, blank=True)

Если статья является оригинальной статьей, то parent_article = None. Если статья является переводом, то «parent_article» <> Нет.

Итак, я создал:

class ArticleAdminForm(forms.ModelForm):
    .
    .
    parent_article = forms.ModelChoiceField(queryset=AyurvedicArticle.objects.filter(parent_article=None), help_text="Select the parent article (if any)")

    class Meta:
        Article

class ArticleAdmin(admin.ModelAdmin):
    form = ArticleAdminForm
    .
    .

Теперь, когда я применяю все это, это, кажется, работает нормально, но когда я не выбираю «родительскую статью», я получаю сообщение об ошибке в Admin, в котором говорится «Это поле обязательно», даже если модель говорит: «null = True, Blank = True ".

Когда я не использую настроенную форму, то есть закваску из заявления

class ArticleAdmin(admin.ModelAdmin):
#    form = ArticleAdminForm
    .
    .

тогда все работает, за исключением того, что теперь у меня много вариантов. В документации «ModelChoicesField» вы можете прочитать фразу «Обратите внимание, что если требуется ModelChoiceField ...», то есть подразумевать, что ModelChoiceField не требуется.

Есть идеи, как с этим бороться?

1 Ответ

24 голосов
/ 12 апреля 2010

Если вы собираетесь переопределить форму, вам нужно установить поле как не обязательное в ArticleAdminForm.

class ArticleAdminForm(forms.ModelForm):
    .
    .
    parent_article = forms.ModelChoiceField(
        queryset=AyurvedicArticle.objects.filter(parent_article=None),
        required=False,
        help_text="Select the parent article (if any)"
    )

    class Meta:
        Article
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...