모델이 Foo
입니다. 여러 데이터베이스 속성과 여러 요소를 조합하여 계산 된 여러 속성이 있습니다. 이 계산 된 속성을 데이터베이스 속성 인 것처럼 사용자에게 제공하고 싶습니다. (backing factor는 사용자 입력을 반영하여 변경 될 것입니다.) Django admin 인터페이스로 이것을 할 수있는 방법이 있습니까?Django : 관리자 인터페이스에서 필드 위장?
답변
Foo
(FooAdminForm)의 모델 폼을 서브 클래 싱하여 데이터베이스에서 지원하지 않는 필드를 추가하는 것이 좋습니다. 사용자 정의 유효성 검사는 ModelForm의 clean_*
메소드에있을 수 있습니다.
FooAdmin
의 save_model
메서드 내부에 요청을 받으면 Foo
인스턴스와 양식 데이터가 있으므로 인스턴스 저장 전후의 데이터 처리를 모두 할 수 있습니다. 난 (인스턴스 데이터
을 기반으로
from django import forms
from django.db import models
from django.contrib import admin
class Foo(models.Model):
name = models.CharField(max_length=30)
class FooAdminForm(forms.ModelForm):
# custom field not backed by database
calculated = forms.IntegerField()
class Meta:
model = Foo
class FooAdmin(admin.ModelAdmin):
# use the custom form instead of a generic modelform
form = FooAdminForm
# your own processing
def save_model(self, request, obj, form, change):
# for example:
obj.name = 'Foo #%d' % form.cleaned_data['calculated']
obj.save()
admin.site.register(Foo, FooAdmin)
사용자 정의 필드의 초기 값을 제공 : 여기
장고 관리자에 등록 된 사용자 지정 양식을 가진 모델에 대한 예입니다 이것이 최선의 해결책인지 확실하지 않지만 작동해야합니다.)databa의 기존 모델 인스턴스에 대한 modelform se가 생성되면이 인스턴스가 전달됩니다. 그래서 FooAdminForm의 __init__
에서는 인스턴스 데이터를 기반으로 필드 속성을 변경할 수 있습니다.
def __init__(self, *args, **kwargs):
# only change attributes if an instance is passed
instance = kwargs.get('instance')
if instance:
self.base_fields['calculated'].initial = (instance.bar == 42)
forms.ModelForm.__init__(self, *args, **kwargs)
좋아 보인다. 그러나,'IntegerField' 대신'CheckboxInput'을 사용하면, 나타나지 않습니다. 또한, 어떻게 체크 박스의 초기 값을 설정할 수 있습니까? 'check_true' 함수는 필드의 "value"를 받겠지만, 그 값이 무엇인지 어떻게 설정합니까? –
CheckBoxInput을 기본 위젯으로 사용하는'BooleanField'를 사용하십시오. django의 폼 필드는'initial ='키워드 인수를 받아들입니다. 예를 들면 :'bar = forms.BooleanField (initial = True)' –
. Backing Model 인스턴스의 함수로 초기 값을 설정하려면 어떻게해야합니까? –
편집 양식에서 readonly_fields (1.2 이상)에 속성 이름을 입력하십시오.
변경 목록에서 list_display에 넣으십시오.
하지만 편집 가능한 속성을 원합니다. 데이터베이스 행에 직접 해당하는 것은 아니므로 적절하게 백엔드 데이터를 변경하려면 자체 처리를 수행해야합니다. –
당신은 모델에 @property의 장식을 사용할 수 있습니다 (파이썬> = 2.4) :
class Product(models.Model):
@property
def ranking(self):
return 1
다음 list_display
에서 사용할 수있는 "순위"
class ProductAdmin(admin.ModelAdmin):
list_display = ('ranking', 'asin', 'title')
'@ property'는 필요하지 않습니다. 'list_display' 모델 (또는 ModelAdmin) –
그것은 쉽게 변경 목록에 임의의 데이터를 표시하거나 양식에 필드를 표시하려면 다음을 수행하십시오. list_display
은 모델 또는 Modeladmin에 정의 된 실제 모델 특성 또는 메소드를 임의로 취하며 사용자는 하위 폼 forms.ModelForm
을 사용하여 변경 양식에 입력 할 필드 유형을 추가하십시오.
두 가지를 결합하는 것, 즉 list_editable
을 지정하여 내부에서 편집 할 수있는 변경 목록에있는 임의의 데이터 조각이있는 것은 훨씬 어렵거나 불가능합니다. Django는 데이터베이스 필드에 해당하는 실제 모델 속성 만 허용하는 것으로 보입니다. (모델 정의의 메소드에 @property
을 사용해도 충분하지 않음).
변경 목록 페이지에서 실제로 모델에없는 필드를 편집하는 방법을 발견 한 사람이 있습니까?
에 대한 모든 메서드를 받아 들일 것입니다 그 대답을 얻고 싶습니다. – haki
- 1. django 1.2.1 : 관리자 인터페이스에서 모델 이름을 덮어 쓰시겠습니까?
- 2. Django 관리자 인터페이스에서 항목을 복제 할 수있는 방법이 있습니까?
- 3. Django 관리자 사이트의 필드 간 자동 탭
- 4. 더 나은 Django 관리자 ManyToMany 필드 위젯
- 5. Django Admin 양식 인터페이스에서 관련 객체 정렬
- 6. Django 관리자 양식 (many to many relationship)
- 7. 기본 Django - 맞춤 관리자
- 8. Django 관리자 페이지에서 'Sites'제거
- 9. 관리자 페이지 django 오류
- 10. Django 사용자 지정 관리자
- 11. Django 관리자 인증
- 12. Django, 관리자 모델
- 13. 이상한 django 관리자 importerror
- 14. Django 관리자 목록 필터
- 15. Django, 고유 필드 생성
- 16. django admin - 즉시 필드 추가
- 17. 장고 관리자 - 다 대다 필드 혼동
- 18. Django 관리자 인터페이스의 필드를 사용자 정의하는 방법
- 19. Django 관리자 목록 레이아웃 변경
- 20. django-staticfiles 관리자 인터페이스가 깨어짐
- 21. Django 관리자 패널의 사용자 정의보기
- 22. 초기 Django 관리자 로그 아웃
- 23. Django 관리자가 관리자 색인에서 사라졌습니다.
- 24. Django 관리자 축소 오류 수정
- 25. Django 관리자, 인라인 필드의 채우기는
- 26. Django : 관리자 인터페이스에 이미지 표시
- 27. Django 관리자 페이지 드롭 다운
- 28. Django 관리자 템플릿 해상도 디버그
- 29. 장고 관리자 인터페이스에서 데이터를 추가 할 때 : 관리자에서 형식 오류를/... 유니 코드 개체를 호출하지
- 30. Django 모델 필드 유효성 검사
관리자 변경 목록 또는 양식에 표시 하시겠습니까? –
@lazerscience 관리자 변경 목록이 무엇인지 잘 모르겠습니다. 확실히 양식. –
양식에서 (표시되고 편집 할 수없는) 항목을 표시하고 모델의 메소드로 사용할 수있게하려면 "change_form.html"파일을 $ {TEMPLATE_ROOT}/admin/APPNAME/MODELNAME/change_form.html을 편집하여 마음의 내용을 편집하십시오. –