vkill'blog

“技术本身没有太多价值,掌握了新的思考方式才是真的收获”

更改 modelchoicefield 下拉里的内容

11:21 , vkill
官方文档:http://docs.djangoproject.com/en/dev/ref/forms/fields/#modelchoicefield

默认的是显示 Model().__unicode__() 里的内容,下面几个位置都可以改,在任一一个地方改都可以
方法1:

class BookForm(ModelFormBase):
    def __init__(self, *args, **kwargs):
        super(self.__class__, self).__init__(*args, **kwargs)
        self.fields['person'].queryset = Person.objects.all()
        self.fields['person'].label_from_instance = lambda obj: "%s" % (obj.name)
    class Meta:
        model = Book
    mytest = forms.CharField(max_length=5)


方法2:

from django.forms.models import ModelChoiceField
class PersonModelChoiceField(ModelChoiceField):
    def label_from_instance(self, obj):
        return "%s" % obj.name
class BookForm(ModelFormBase):
    class Meta:
        model = Book
    mytest = forms.CharField(max_length=5)
    person = PersonModelChoiceField(queryset = Person.objects.all())



方法3:

class Person(ModelPerson, MPerson):
    def __unicode__(self):
        return "%s" % self.name


方法4:view中动态的更改

def create_book(request):
    form = BookForm()
    form.fields['category'].queryset = request.user.categories.all()
    #form.base_fields['category'].queryset = request.user.categories.all()


ok了,具体的用哪个这个看需求,哈哈
Last modified by vkill on2011/05/19 11:25
类别:python & django | Tags: , , , , , | 0 条评论, 2038 次阅读
网友评论(0):
发表评论:

Nickname: 
Email:
Site URI: