모델과 양식이 많은 장고 사이트가 있습니다. 많은 사용자 정의 양식 및 양식 세트와 인라인 양식 세트 및 사용자 정의 유효성 검사 및 사용자 정의 쿼리 세트가 있습니다. 따라서 모델 추가 작업은 다른 사항이 필요한 양식에 따라 다르며 django 관리자의 ‘모델 추가’는 사용자 지정 쿼리 집합에서 500을 통과합니다.
특정 모델에 대해 ‘Add $ MODEL’기능을 비활성화 할 수 있습니까?
내가 원하는 /admin/appname/modelname/add/
에있을 수있는 404 (오류 메시지 ‘사라’또는 적합), 내가 원하지 않는 ‘$ MODELNAME 추가’버튼 줄 /admin/appname/modelname
보기를.
Django admin은 관리자 작업 (http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disabling-actions)을 비활성화하는 방법을 제공하지만이 모델의 유일한 작업은 ‘delete_selected’입니다. 즉, 관리자 작업은 기존 모델에서만 작동합니다. 이 작업을 수행하는 장고 같은 방법이 있습니까?
답변
클래스 has_add_permission
에서 오버로드 메소드는 다음 Admin
과 같이 쉽습니다 .
class MyAdmin(admin.ModelAdmin):
def has_add_permission(self, request, obj=None):
return False
답변
기본적으로 syncdb는 각 모델에 대해 3 가지 보안 권한을 만듭니다.
- 만들기 (일명 추가)
- 변화
- 지우다
관리자로 로그인하면 무엇이든지 모든 것을 얻을 수 있습니다.
그러나 “일반 액세스” 라는 새 사용자 그룹 (예 :)을 만들면 모든 모델에 대해 변경 및 삭제 권한 만 할당 할 수 있습니다.
그런 다음 해당 그룹의 구성원 인 로그인 한 사용자는 “만들기”권한을 갖지 않으며, 관련된 어떤 것도 화면에 표시되지 않습니다.
답변
나는 이것이 당신을 도울 것이라고 생각합니다. 아래 코드는 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
에 의해 게시 된 위의 additon에서
# This will help you to disable change functionality
def has_change_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
in 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”는 마법을 수행합니다. 감사.
답변
