Djangoサイトがたくさんあります。多くのモデルとフォームがあります。多くのカスタムフォームとフォームセットとインラインフォームセット、カスタム検証とカスタムクエリセットがあります。およびDjango= adminの「モデルの追加」は、カスタムクエリセットから500を介します。
とにかく特定のモデルの「$ MODELを追加」機能を無効にする方法はありますか?
が欲しいです /admin/appname/modelname/add/
404(または適切な 'Go away'エラーメッセージ)を表示するために、[Add $ MODELNAME]ボタンを/admin/appname/modelname
見る。
Django adminはadminアクション(http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disabling-actions)を無効にする方法を提供しますが、このモデルの唯一のアクションは「delete_selected」です。つまり、管理アクションは既存のモデルでのみ動作します。これを行うジャンゴ風の方法はありますか?
Admin
クラスのhas_add_permission
メソッドを次のようにオーバーロードするだけです。
class MyAdmin(admin.ModelAdmin):
def has_add_permission(self, request, obj=None):
return False
デフォルトでは、syncdbはモデルごとに3つのセキュリティ権限を作成します。
管理者としてログインしている場合、[〜#〜] everything [〜#〜]に関係なく取得できます。
ただし、"General Access"(たとえば)と呼ばれる新しいユーザーグループを作成すると、すべてのモデルに変更と削除の権限のみを割り当てることができます。
そのグループのメンバーであるログインユーザーは「作成」権限を持たず、それに関連するものは何も画面に表示されません。
私はこれがあなたを助けると思う..以下のコードはadmin.pyファイルになければなりません
@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
list_display = ('name', )
list_filter = ('name', )
search_fields = ('name', )
list_per_page = 20
# This will help you to disbale add functionality
def has_add_permission(self, request):
return False
# This will help you to disable delete functionaliyt
def has_delete_permission(self, request, obj=None):
return False
# In admin
# make the related field can't be added
def get_form(self, request, obj=None, **kwargs):
form = super().get_form(request, obj, **kwargs)
form.base_fields['service'].widget.can_add_related = False
return form
# In inline formset e.g. admin.TabularInline
# disable all
def get_formset(self, request, obj=None, **kwargs):
formset = super().get_formset(request, obj, **kwargs)
service = formset.form.base_fields['service']
service.widget.can_add_related = service.widget.can_change_related = service.widget.can_delete_related = False
return formset
service = formset.form.base_fields['service']
base_fields
はモデルで定義されたフィールドです
フォームで定義されている場合:
product = formset.form.declared_fields['product']
これは遅すぎる回答です。誰かが同じ解決策を見つけているかのようにこれを投稿するだけです。
Admin.pyファイルでは、次のことができます。
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
fields = '__all__'
class MyModelAdmin(admin.ModelAdmin):
form = QuestionTrackAdminForm
list_display = ['title', 'weight']
readonly_fields = ['title', 'weight']
admin.site.register(MyModel, MyModelAdmin)
ここでは、「readonly_fields」が魔法を行います。ありがとう。