2010-04-12 3 views
9

Tôi có một mô hìnhlà một ModelChoiceField luôn được yêu cầu?

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

Nếu một bài báo là một bài viết gốc rồi 'parent_article = Không'. Nếu một bài viết là bản dịch thì 'parent_article' <> Không có.

Vì vậy, tôi đã tạo:

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

Bây giờ khi tôi áp dụng tất cả điều này có vẻ như để làm việc tốt, nhưng khi tôi không chọn một 'bài viết của cha mẹ tôi nhận được một thông báo lỗi trong quản trị nêu rõ "Trường này được yêu cầu "mặc dù mô hình cho biết:" null = True, Blank = True ".

Khi tôi không sử dụng các hình thức tùy chỉnh, ví dụ: men ra tuyên bố

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

sau đó tất cả mọi thứ công việc, ngoại trừ bây giờ tôi có được nhiều sự lựa chọn. Trong tài liệu của "ModelChoicesField" bạn có thể đọc một cụm từ "Lưu ý rằng nếu một ModelChoiceField là bắt buộc ..." ngụ ý một ModelChoiceField không cần phải được yêu cầu.

Bất kỳ ý tưởng nào về cách giải quyết vấn đề này?

Trả lời

21

Nếu bạn định ghi đè biểu mẫu bạn cần đặt trường như không bắt buộc trong số 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 
+1

Đáng chú ý nhấn mạnh điểm: nếu bạn ghi đè một trường, bạn ghi đè * tất cả * thuộc tính của nó, bao gồm việc có cần hay không. –

+0

Cảm ơn rất nhiều vì đã giải thích. Thực ra tôi biết nó có liên quan đến 'required = False' nhưng tôi đã sai cú pháp. – Henri