如何显示关联的表单字段?

时间:2014-05-16 12:49:53

标签: python django python-3.x

请帮助解决问题。

有一个表格包含有关用户的数据。该表有一个相关的字段'性别'。您希望显示带有下拉列表的表单以选择性别。

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>

问题是线路输出

  

1

。我需要输出类似于:

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

1 个答案:

答案 0 :(得分: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__

定义了Gender

在此处查看更多信息:

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