Bu, çeşitli yollarla yapılabilir.
User
numaralı proxy alt sınıfını oluşturun ve kullanıcının tam adını döndürmek için __unicode__()
yöntemini geçersiz kılın. Modeliniz şeklinde Şimdi
class UserFullName(User):
class Meta:
proxy = True
def __unicode__(self):
return self.get_full_name()
, kullanıcıların almak için
UserFullName
kullanın.
class BookForm(forms.ModelForm):
author = forms.ModelChoiceField(queryset=UserFullName.objects.all())
class Meta:
model = Book
bir başka yolu dinamik olarak formun yapıcı seçimler doldurmak etmektir.
class BookForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(BookForm, self).__init__(*args, **kwargs)
users = User.objects.all()
self.fields['author'].choices = [(user.pk, user.get_full_name()) for user in users]
class Meta:
model = Book
Belki en "djangonic" yollu benzer soru Django forms: how to dynamically create ModelChoiceField labels bir cevap olarak lazerscience ile ortaya konmuştur. ModelChoiceField
'un alt sınıflarını alır ve seçim etiketleri sağlamak için tasarlanmış olan label_from_instance()
yöntemini geçersiz kılar. böylece varsayılan yardım metni ('kontrol veya komutunu kullanın birden seçmek için
class UserFullnameMultipleChoiceField(ModelMultipleChoiceField):
def label_from_instance(self, obj):
return smart_unicode(obj.get_full_name())
class BookForm(forms.ModelForm):
authors = UserFullnameMultipleChoiceField(queryset=User.objects.all(),
help_text=Book.authors.field.help_text)
Not I kopya help_text
var:
Török Gábor cevabı ek olarak
class UserFullnameChoiceField(forms.ModelChoiceField):
def label_from_instance(self, obj):
return smart_unicode(obj.get_full_name())
class BookForm(forms.ModelForm):
author = UserFullnameChoiceField(queryset=User.objects.all())
class Meta:
model = Book
Model sınıfınızı her zaman tekil olarak adlandırın, "Kitaplar" yerine "Kitap" yazın. –
[Django formlarının olası bir kopyası: ModelChoiceField etiketlerini dinamik olarak oluşturma] (http://stackoverflow.com/questions/2958792/django-forms-how-to-dynamically-create-modelchoicefield-labels) –