장고 관리자 - 특정 모델에 대해 '추가' 작업을 사용하지 않습니다.
저는 모델과 형태가 많은 장고 사이트를 가지고 있습니다.많은 사용자 정의 양식 및 양식 세트와 인라인 양식 세트, 사용자 정의 검증 및 사용자 정의 쿼리 세트를 보유하고 있습니다.따라서 모델 추가 작업은 다른 작업이 필요한 양식에 따라 달라지며, django 관리자의 '모델 추가'는 사용자 지정 쿼리 세트에서 500을 통과합니다.
특정 모델에 대해 '$MODEL 추가' 기능을 비활성화할 수 있는 방법이 있습니까?
나는 되고 싶다./admin/appname/modelname/add/
404(또는 적절한 '이동' 오류 메시지)를 표시하려면 'Add $MODELNAME' 버튼을 켜지 마십시오./admin/appname/modelname
보다.
Django admin은 관리 작업(http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/ #discovery-disable)을 사용하지 않도록 설정하는 방법을 제공하지만 이 모델에 대한 유일한 작업은 'delete_selected'입니다. 즉, 관리 작업은 기존 모델에만 적용됩니다.이것을 할 수 있는 장고풍의 방법이 있습니까?
그것은 쉽습니다, 단지 과부하입니다.has_add_permission
의 메소드Admin
이와 같은 클래스:
class MyAdmin(admin.ModelAdmin):
def has_add_permission(self, request, obj=None):
return False
이것이 당신에게 도움이 될 것 같습니다.아래 코드는 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
게시한 바와 같이 위에 추가로
# This will help you to disable change functionality
def has_change_permission(self, request, obj=None):
return False
기본적으로 syncdb는 각 모델에 대해 3개의 보안 권한을 생성합니다.
- 만들기(일명 추가)
- 바꾸다
- 삭제
관리자로 로그인하면 어떤 일이 있어도 모든 것을 얻을 수 있습니다.
그러나 "일반 액세스"라는 새 사용자 그룹을 만드는 경우(예: 모든 모델에 대해 변경 및 삭제 권한만 할당할 수 있습니다.
그러면 해당 그룹의 구성원인 로그인한 사용자는 "만들기" 권한이 없으며, 관련된 내용은 화면에 표시되지 않습니다.
다른 답변에서 코드를 복사하기만 하면 됩니다.
# 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"는 마법을 수행합니다.감사해요.
언급URL : https://stackoverflow.com/questions/4143886/django-admin-disable-the-add-action-for-a-specific-model
'source' 카테고리의 다른 글
튜플에서 값을 변경하는 방법은 무엇입니까? (0) | 2023.06.18 |
---|---|
MariaDB: 특정 Column_A 값 및 Column_B를 기준으로 정렬 (0) | 2023.06.18 |
통계 분석 및 보고서 작성 워크플로우 (0) | 2023.06.18 |
루비 스크립트 파일을 레일 콘솔에 전달 (0) | 2023.06.13 |
주피터 노트북의 커널 제거 (0) | 2023.06.13 |