2013-06-18 85 views
2

我有一个带有m2m字段的模型给OtherModel。设置Django ModelChoiceField的初始值

class OtherModel(models.Model)  
    name = models.CharField(max_length=100, null=True) 

class Model(models.Model) 
    name = models.CharField(max_length=100, null=True) 
    otherModel = models.ManyToManyField(OtherModel) 

对于模型我使用一个普通的FormSet()。对于otherModel我用formset_factory()类

我只希望允许从OtherModel数据库中选择数据,所以我在OtherModel与此代码更改CharField名字命名的ModelChoiceField:

def otherModel_formset(self, patientenID): 

    class OtherModelForm(ModelForm): 
     name= ModelChoiceField(queryset=OtherModel.objects.all()) 

     def __init__(self, *args, **kwargs): 
      super(OtherModelForm, self).__init__(*args, **kwargs) 


     class Meta: 
      model = OtherModel 
      fields = ['name'] 

    return formset_factory(form=OtherModelForm, max_num=10) 

我可在M2M领域保存所选的名字,但在重装他们选择什么

exampel:

<select id=some_id" name="some_name"> 
    <option value="1"> HAWAII </option> 
    <option value="2"> ALASKA</option> 
</select> 

在exampel ALASKA在提交和重载应该处于一种这个所选:

<select id=some_id" name="some_name"> 
    <option value="1"> HAWAII </option> 
    <option value="2" **selected="selected"**> ALASKA</option> 
</select> 

,但这一立场在HTML内容:

<select id=some_id" name="some_name"> 
    <option value="1"> HAWAII </option> 
    <option value="2"> ALASKA</option> 
</select> 

有人知道解决办法?

+0

您需要发布相关代码:您的视图在哪里?您的视图需要将绑定的表单(form(request.POST)发送回模板。 –

回答

4

的问题是使用request.POSTinitial={'name': 'ALASKA'}在一起。发生这种情况是因为request.POST的值始终会覆盖参数“initial”的值,所以我们必须将其分开。我的解决方案是使用这种方式。

views.py

if request.method == "POST": 
    form=OtherModelForm(request.POST) 
else: 
    form=OtherModelForm() 

forms.py

class OtherModelForm(ModelForm): 
    name= ModelChoiceField(queryset=OtherModel.objects.all(), initial={'name': 'ALASKA'}) 

---------- ----------或

views.py

if request.method == "POST": 
    form=OtherModelForm(request.POST) 
else: 
    form=OtherModelForm(initial={'name': 'ALASKA'}) 

In forms.py

class OtherModelForm(ModelForm): 
    name= ModelChoiceField(queryset=OtherModel.objects.all()) 
1

你应该有你的观点的东西,看起来是沿着线:

form=OtherModelForm(request.POST, initial={'name': 'ALASKA'}) 
0

我有如下代码:

otherModel = OtherModel.objects.all() 
otherModelFormSet = otherModel_formset(id) 
otherModelList = otherModel.values('id', 'name') 
inProgressOtherModel = otherModelFormSet(None, initial=otherModelList, prefix='otherModel')