class Book(models.Model):
title = models.CharField(..., null=True)
type = models.CharField(...)
author = models.CharField(...)
私はmodels.pyに簡単なクラスがあります。管理者で、保存された本のタイプが1の場合、本のタイトルを(本の詳細フォームで)非表示にします。これを最も簡単な方法で行うにはどうすればよいですか。
class Book(models.Model):
title = models.CharField(..., null=True)
type = models.CharField(...)
author = models.CharField(...)
私はmodels.pyに簡単なクラスがあります。管理者で、保存された本のタイプが1の場合、本のタイトルを(本の詳細フォームで)非表示にします。これを最も簡単な方法で行うにはどうすればよいですか。
モジュールに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
フォーム内の値を保持したい場合 (たとえば、要求に基づいてユーザーの値を設定するなど)、フィールドを非表示にする場合は、ウィジェットを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