【问题标题】:How to handle data from two forms in one view?如何在一个视图中处理来自两种形式的数据?
【发布时间】:2020-10-20 21:19:52
【问题描述】:

所以我有两个forms.ModelForm 用于我的两个模型

第一:

class TranslatorChoice(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        self.user_id = kwargs.pop('user_id',None)
        super(TranslatorChoice, self).__init__(*args, **kwargs)
        self.fields['owner'].queryset = Translator.objects.all().filter(owner_id = self.user_id)
    owner = forms.ModelChoiceField(queryset =  None)
    class Meta:
        model = Translator
        fields = ('owner',)

第二:

class ProfileChoice(forms.ModelForm):
def __init__(self, *args, **kwargs):
    self.user_id = kwargs.pop('user_id',None)
    super(ProfileChoice, self).__init__(*args, **kwargs)
    self.fields['login'].queryset = Profile.objects.all().filter(created_by_id = self.user_id)

login = forms.ModelChoiceField(queryset= None, label='Profile')
class Meta:
    model = Profile
    fields = ('login',)

我尝试为他们编写view,但它不起作用,似乎只是无法保存,因为每当我点击提交按钮时,它只会刷新页面并清理字段,而不会将我重定向到所需的 URL .我的数据库中的模型实例也没有更新。

这是视图:

def link_profile(request):
context = {
'form': ProfileChoice(user_id=request.user.id),
'form2': TranslatorChoice(user_id=request.user.id)
}
if request.method == 'POST':
    form = ProfileChoice(request.POST)
    form2 = TranslatorChoice(request.POST)
    if form.is_valid():

        login = form.cleaned_data.get('login')
        translator = form.cleaned_data.get('owner')
        link = Profile.objects.get(login=login)
        link.owner = login
        link.save(['owner'])
        form.save()
        form2.save()
        return redirect('dashboard')
return render(request, 'registration/link.html', context)

我也知道出了点问题,因为我使用了很多 save 函数。我只是没有任何创建 views 这样的经验......

分享我的模板:

{% extends 'base.html' %}

{% block content %}
  <h2>Add profile</h2>
  <form method="post">
    {% csrf_token %}
    <table>

    {{ form.as_table }} {{ form2.as_table }}
    </table>

    <button type="submit">Link</button>
  </form>
{% endblock %}`

还有我的urls.py 部分视图:

url(r'^link/', views.link_profile),

【问题讨论】:

    标签: python django django-forms django-views


    【解决方案1】:

    您没有共享您的 urls.py 或模板中的表单,因此不清楚视图是否正在执行,或者您如何传递表单。但是,如果您还没有这样做,这里可能会奏效。

    {{ form.as_table }} {{ form2.as_table }}

    仅供参考:您的代码存在一些缩进问题,但我假设这只是您将其粘贴到此处时发生的事情。

    【讨论】:

    • 试过这个并没有真正改变。不过,在问题中添加了 url 和我的模板。
    • 您的表单缺少操作。在此页面上查找“操作”以查看示例:docs.djangoproject.com/en/3.1/topics/forms
    猜你喜欢
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 2011-03-17
    • 2022-07-07
    相关资源
    最近更新 更多