如何使用使用来自数据库的数据的forms.ModeForm呈现CheckboxSelectMultiple表单:-> SomeModel.objects.filter(user = request.user)

时间:2019-09-11 18:43:08

标签: django django-models django-forms django-views django-2.2

请看一下代码,如果您无法理解所发生的情况,我将在最后进行解释

我有一个名为Good的模型

class Good(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    ans = models.CharField(max_length=1024)

和表格

class GoodForm(forms.ModelForm):
    def __init__(self, request=None, *args, **kwargs):
        super(GoodForm, self).__init__(*args, **kwargs)
        self.input_list = request.user.love_set.all()
        self.fields['ans'] = forms.MultipleChoiceField(
            label="",
            choices=[(c.ans, c.ans) for c in self.input_list],
            widget=forms.CheckboxSelectMultiple
        )

    class Meta:
        model = Good
        fields = ('ans',)

的视图是

@login_required
def good_form(request):
    form = GoodForm(request)
    if request.method == 'POST':
        form = GoodForm(request, request.POST)
        if form.is_valid():
            answer = form.save(commit=False)  #problem is here
            answer.user = request.user
            answer.save()
            return redirect('app-2:money')

        else:
            form = GoodForm(request)
            return render(request, 'purpose_using_DB/good_at_form.html', {'form': form, 'error': 'Error occured'})

    else:
        return render(request, 'purpose_using_DB/good_at_form.html', {'form': form})

所以我想在这里做的是:-

  1. 我想呈现一个名为GoodForm的表单,该表单是与模型ModelForm相关的Good

  2. 该表单呈现为称为Love的表中已经显示的选项。

  3. 查询Love.objects.filter(user=user)等效于request.user.love_set.all()(从某种意义上说,如果不是完全的话)

  4. 我希望用户选择已经存在的选项,然后单击提交。

  5. 成功提交后,我希望将数据保存在ans表的Good内部,该表已使用ForeignKey

  6. 映射到用户

我的问题是:

  1. 如何将表单中的数据保存到数据库中?它将所选的ChechBoxes保存为List。例如,如果我选择1,2,3并向用户查询,它会向我显示['1','2','3']

  2. 我是否可以通过使用initial = some_list / query(或不使用传递请求对象且不使用构造函数)在视图中使用Love Form内部视图中的数据预填充表单?

任何答案都可以,其解决方案也可以。非常感激。预先谢谢你。

0 个答案:

没有答案
相关问题