2014-05-16 39 views
1

请帮忙解决问题。如何显示关联的表单域?

有一张关于用户数据的表格。该表具有“性别”相关字段。你想显示一个带有下拉列表的表单来选择性别。

models.py:

class Gender(models.Model):  
    gender = models.CharField(
     max_length=10, 
     blank=False, 
    ) 
class UserProfile(User): 
    nickname = models.CharField(
     'Отображаемое имя', 
     max_length=30, 
     blank=False, 
    ) 
    gender = models.ForeignKey(
     Gender, 
     #default=1, 
     null=True, 
    ) 

views.py:

def personal_data_page(request): 
    entry_user_profile = UserProfile.objects.get(user_ptr_id__exact=request.user.id)  
    form = PersonalDataForm(instance=entry_user_profile)  

    t = loader.get_template('personal_data_page.html') 
    c = RequestContext(request, { 
     'form': form, 
    }) 
    return HttpResponse(t.render(c)) 

forms.py:

class PersonalDataForm(forms.ModelForm):  
    class Meta: 
     model = UserProfile 
     fields = (
      'nickname', 
      'gender', 
     ) 

personal_data_page.html:

<div class="cell"> 
    <label class="label">{{ form.gender.label }}</label> 

    {{ form.gender }} 

    {{ form.gender.errors }} 
</div> 

的问题是,线输出

。我需要的输出是一样的东西:

<select> 
    <option value="1">Male</option> 
    <option value="2">Female</option> 
</select> 

回答

1

为什么你会做出UserProfile模型与ForeignKey的性别表?只需在UserProfile中包含性别即可。

你在找什么叫做choice_field

下面是一个例子:ChoiceField in Django model

这里是文档:https://docs.djangoproject.com/en/dev/ref/models/fields/#field-choices

而且,这里是关于使用与选择一个小部件的一些文档:https://docs.djangoproject.com/en/dev/topics/forms/modelforms/

编辑

如果你真的想保持性别表:

class PersonalDataForm(forms.ModelForm):  
    class Meta: 
     model = UserProfile 
     fields = (
      'nickname', 
      'gender', 
     ) 
     widgets = {'gender': forms.ModelChoiceField(queryset = 
                Gender.objects.all())} 

,假设你已定义为__unicode__ for Gender

详见这里:

  1. Specifying widget for model form extra field (Django)
  2. Django, ModelChoiceField() and initial value
+0

我需要通过外键做的,而不是通过 – user3607370

+1

做出的编辑为您的选择。 PS:如果你想成为国际社会的一员,并希望以英语获得答案,请在基础水平上学习英语。我们需要首先理解你的问题 –

+0

对不起。谢谢 – user3607370