71
class Book(models.Model):
    title = models.CharField(..., null=True)
    type = models.CharField(...)
    author = models.CharField(...)

私はmodels.pyに簡単なクラスがあります。管理者で、保存された本のタイプが1の場合、本のタイトルを(本の詳細フォームで)非表示にします。これを最も簡単な方法で行うにはどうすればよいですか。

4

5 に答える 5

30

モジュールにadmin.pyを作成します (おそらくbook )

class BookAdmin(admin.ModelAdmin):
    list_display = ("pk", "get_title_or_nothing")

ブッククラスでは:

class Book:
    ...
    def get_title_or_nothing(self):
        if self.type == WEIRD_TYPE:
            return ""
        return self.title

更新しました:

class BookAdmin(admin.ModelAdmin):
    list_display = ("pk", "get_title_or_nothing")

    def get_form(self, request, obj=None, **kwargs):
        if obj.type == "1":
            self.exclude = ("title", )
        form = super(BookAdmin, self).get_form(request, obj, **kwargs)
        return form
于 2012-04-26T11:52:56.290 に答える
0

フォーム内の値を保持したい場合 (たとえば、要求に基づいてユーザーの値を設定するなど)、フィールドを非表示にする場合は、ウィジェットをforms.HiddenInput()次のように変更できます。

from django import forms

...

    def get_form(self, request, obj=None, **kwargs):
        """Set defaults based on request user"""
        # update user field with logged user as default
        form = super().get_form(request, obj, **kwargs)
        form.base_fields["user"].initial = request.user.id
        form.base_fields["user"].widget = forms.HiddenInput()
        return form

于 2021-10-07T00:32:36.183 に答える