Django ModelChoiceField : 쿼리 세트 필터링 및 기본값을 객체로 설정
Django Form 클래스가 다음과 Models
같이 정의되어 있습니다 .
class AccountDetailsForm(forms.Form):
...
adminuser = forms.ModelChoiceField(queryset=User.objects.all())
이것은 정상적으로 작동하지만 몇 가지 제한 사항이 있습니다.
(1) 다음과 같이 accountid
양식에 전달 된 변수를 기반으로 쿼리 세트에 필터를 사용하고 싶습니다.
User.objects.filter(account=accountid)
accountid
물론 변수로 전달할 수 없기 때문에 모델에서 작동 하지 않습니다.
것을 다음 queryset
필수가 어떻게 든 정의 할 수 Views
있지만, 지금까지의 내가 볼 수는 Form 클래스에서 필요한 필드입니다.
(2) AccountDetailsForm
데이터베이스에서 개체 의 기본 선택을 하고 Views
싶습니다. 다음과 같이 선택할 수 있습니다 .
User.objects.filter(account=accountid).filter(primary_user=1)
양식의 기본값으로 adminuser를 지정해 보았습니다 (같은 다른 표준 양식 필드에서 작동 함 CharField
).
adminuser = User.objects.filter(account=accountid).filter(primary_user=1)
...
form = AccountDetailsForm({'adminuser': adminuser})
return render_to_response('accounts/edit/accountdetails.html',
{'form': form, 'account':account})
하지만 운이 없습니다.
ModelChoiceField
여기에 필요한 유연성 외에 다른 것을 사용해야합니까 ?
감사.
init 메서드를 재정의하고 새 키워드 인수를 수락합니다.
class AccountDetailsForm(forms.Form):
...
adminuser = forms.ModelChoiceField(queryset=User.objects.all())
def __init__(self, *args, **kwargs):
accountid = kwargs.pop('accountid', None)
super(AccountDetailsForm, self).__init__(*args, **kwargs)
if accountid:
self.fields['adminuser'].queryset = User.objects.filter(account=accountid)
form = AccountDetailsForm(accountid=3)
보기에서도 항상 수동으로 선택 사항을 설정할 수 있습니다.
form = AccountDetailsForm()
form.fields['adminuser'].queryset = User.objects.filter(account=accountid)
경고하십시오 : 예제와 같이 사전을 양식에 전달하여 기본값을 설정 하지 않습니다 .
실제로 Bound Form을 만들고 잠재적으로 유효성 검사와 모든 재즈를 트리거합니다.
기본값을 설정하려면 initials 인수를 사용하십시오.
form = AccountDetailsForm(initial={'adminuser':'3'})
보기에서 필드를 재정의 할 수 있습니다.
yourForm = AccountDetailsForm()
yourForm.fields['accomodation'] = forms.ModelChoiceField(User.objects.filter(account=accountid).filter(primary_user=1))
In Django 2.0 you can pass object (User
in your case) from the view
to the form
like this (you have to retrieve obj from the DB first):
form = AccountDetailsForm(initial={'adminuser': adminuser})
It will give you a default selected object (answers your 2) question)
ReferenceURL : https://stackoverflow.com/questions/5329586/django-modelchoicefield-filtering-query-set-and-setting-default-value-as-an-obj
'programing tip' 카테고리의 다른 글
메모리를 확보하는 좋은 방법입니까? (0) | 2021.01.08 |
---|---|
Java 웹 애플리케이션 (WAR)에서 구성 파일을 저장하는 가장 좋은 위치는 무엇입니까? (0) | 2021.01.08 |
Java if vs. try / catch 오버 헤드 (0) | 2021.01.07 |
변수의 독 스트링 (0) | 2021.01.07 |
val ()은 어떻게 Number를 반환 할 수 있습니까? (0) | 2021.01.07 |