2012-07-11 14 views
6

içinde __unicode__ dışındaki yöntemi kullanın Django'da bazı formlarda çalışıyorum. Bir alan modeldeki ForeignKey biçimindedir, bu nedenle formda ModelChoiceField olarak gösterilmiştir. ModelChoiceField şu anda listeyi doldurmak için modelin __unicode__ yöntemini kullanır, bu benim istediğim davranışım değil. Modelin başka bir yöntemini kullanmak istiyorum. Belgelerden, kendi QuerySet'u zorlayabildiğim görülüyor, ancak bunun __unicode__'dan başka bir yöntemi kullanmama nasıl yardımcı olacağını göremiyorum.ModelChoiceField Django

Eğer mümkünse bunu varsayılan form yöntemlerinden boşamaktan kaçınmayı tercih ederim.

Herhangi bir öneriniz var mı?

cevap

1

Çok fazla özel bir sorgulama yok, ancak sorgulamalınızı bir listeye dönüştürüyor. Dolayısıyla, sadece bir liste anlayışı ile kendiniz yapmak

(item.pk, item.__unicode__()) 

: Sadece choices=some_queryset yaparsanız Django şeklinde seçimler yapar

choices=[(item.pk, item.some_other_method()) for item in some_queryset] 
+0

Teşekkür ederiz. Gerçekten kullanışlı. – TimD

10

Sen farklı bir yöntem belirtmek için label_from_instance geçersiz kılabilirsiniz:

from django.forms.models import ModelChoiceField 

class MyModelChoiceField(ModelChoiceField): 

    def label_from_instance(self, obj): 
     return obj.my_custom_method() 

Bu alanı formunuzda kullanabilirsiniz. Bu yöntemin alt sınıflarda geçersiz kılınması amaçlanmıştır. İşte orjinal kaynağı: