我很難將很多字段保存到數據庫中。我有很多'outcomevalue_#'字段是根據我擁有的結果數量生成的。用戶選擇結果的子集(相關結果)並輸入關聯的值。我想將相關值與結果一起保存。到目前爲止,我只能通過硬連線來解決問題。將自定義表單字段保存到數據庫的有效方法
views.py
stateoption = get_object_or_404(StateOption, pk=stateoption_id)
if request.method == "POST":
form = UpdateStateOptionWithOutcomesForm(request.POST, instance=stateoption)
if form.is_valid():
cd = form.cleaned_data
outcomevalue = cd['outcomevalue_1'] #hardwired. This needs to be generalized.
for outcome_id in request.POST.getlist('relevantoutcome'):
stateoption_outcome = StateOptionOutcome.objects.create(stateoption=stateoption, relevantoutcome_id=int(outcome_id), outcomevalue=outcomevalue)
forms.py
class UpdateStateOptionWithOutcomesForm(forms.ModelForm):
class Meta:
model = StateOption
def __init__(self, *args, **kwargs):
super(UpdateStateOptionWithOutcomesForm, self).__init__(*args, **kwargs)
self.fields['relevantoutcome']=forms.ModelMultipleChoiceField(queryset=Outcome.objects.all(),required=True, widget=forms.CheckboxSelectMultiple)
outcome_qs=Outcome.objects.all()
for outcome in outcome_qs:
self.fields['outcomevalue_%s' % outcome.pk] = forms.CharField(required=False)
更新
這裏是我剝奪了models.py
class StateOptionOutcome(models.Model):
stateoption = models.ForeignKey(StateOption)
relevantoutcome = models.ForeignKey(Outcome)
outcomevalue = models.CharField(max_length=20)
一些打我身邊後有類似:
outcomelist = request.POST.getlist('relevantoutcome')
for outcome_id in outcomelist:
cd = form.cleaned_data
outcomevalue = cd['outcomevalue_%s' % outcomelist[int(outcome_id)]]
stateoption_outcome = StateOptionOutcome.objects.create(stateoption=stateoption, relevantoutcome_id=int(outcome_id), outcomevalue=outcomevalue)
,但得到的錯誤:
list index out of range
,因爲它抓住的列表,而不是索引位置
我有表橋。我會在上面張貼它。我無法保存結果的所有結果值。代碼解決了它,但並未保存所有結果的所有值。作爲參考:http://stackoverflow.com/questions/18494595/passing-custom-form-values-to-views – nlr25