繁体   English   中英

如果我使用单个字段,Django 不会提交我的表单

[英]Django doesn't submit my form if I using individual fields

由于设计目的,我需要单独呈现我的 Django 表单字段。 它看起来不错,但如果我点击提交它不会做任何事情只是短暂的眨眼。 如果我渲染整个{{ form }}效果很好。 我对自己做错了什么没有任何想法。 你们能帮帮我吗?

html

<form method = "POST">
    <div class="container w-75 bg-light rounded-3 pt-3">
        <div class="form-group">
        {% csrf_token %}
        {% comment %} {{ form }} {% endcomment %}

        <div class="row">
            <div class="col-4 border-right border-primary p-3">
            <h6 class="text-primary">1. text.</h6>
            {{ form.att_v001 }}<br>
            </div>
        
            <div class="col-4  border-primary  pt-3 pl-4">
            <h6 class="text-primary">2.text.</h6>
            {{ form.att_v002 }}<br>
            </div>
       

            <div class="col-4 border-left border-primary pt-3 pl-4">
            <h6 class="text-primary">3. text.</h6>
            {{ form.att_v003 }}<br>
            </div>

            <div class="col-4 border-left border-primary pt-3 pl-4">
            <h6 class="text-primary">4. text.</h6>
            {{ form.att_v004 }}<br>
            </div>

            <div class="col-4 border-left border-primary pt-3 pl-4">
            <h6 class="text-primary">5. text.</h6>
            {{ form.att_v005 }}<br>
            </div>

            <div class="col-4 border-left border-primary pt-3 pl-4">
            <h6 class="text-primary">6. text.</h6>
            {{ form.att_v006 }}<br>
            </div>

        </div>
        <button class="btn btn-large btn-primary" type="submit">Mentés</button>

模型.py

class Attitud(models.Model):

def __str__(self):
    return str(self.user_name)

class question(models.IntegerChoices):
    Nem_jellemző = 0
    Néha_jellemző = 1
    Nagyon_jellemző = 2

user_name = models.ForeignKey(User, on_delete=models.CASCADE, default=1)
att_v001 = models.IntegerField(default=0, null=True, blank=False, choices=question.choices)
att_v002 = models.IntegerField(default=0, null=True, blank=False, choices=question.choices)
att_v003 = models.IntegerField(default=0, null=True, blank=False, choices=question.choices)
att_v004 = models.IntegerField(default=0, null=True, blank=False, choices=question.choices)
att_v005 = models.IntegerField(default=0, null=True, blank=False, choices=question.choices)
att_v006 = models.IntegerField(default=0, null=True, blank=False, choices=question.choices)

forms.py

class AttitudForm(forms.ModelForm):
class Meta:
    model = Attitud
    fields = '__all__'

    widgets = {
        'att_v001': forms.RadioSelect(attrs={'class': 'custom-radio-list'}),
        'att_v002': forms.RadioSelect(attrs={'class': 'custom-radio-list'}),
        'att_v003': forms.RadioSelect(attrs={'class': 'custom-radio-list'}),
        'att_v004': forms.RadioSelect(attrs={'class': 'custom-radio-list'}),
        'att_v005': forms.RadioSelect(attrs={'class': 'custom-radio-list'}),
        'att_v006': forms.RadioSelect(attrs={'class': 'custom-radio-list'}),
    }

视图.py

def stressz_item(request):
form = AttitudForm(request.POST or None)

if form.is_valid():
    form.save()
    form.user_name = request.user
    
    return redirect('/stressz/main.html')
return render(request, 'stressz/attitud-form.html', {'form':form})

class AttitudCreateView(CreateView):
    model = Attitud
    form_class = AttitudForm
    template_name = 'stressz/attitud-form.html'

    def form_valid(self, form):
        form.instance.user_name = self.request.user

        return super().form_valid(form)

我认为您缺少 html 表单中的操作属性。

所以,

  1. 添加动作属性,例如:

    动作="{% url 'application_name: url_path_name' %}"

  2. 将其添加到您的 URLConf 例如:

    路径('url_path/',views.view_name,name='url_path_name'),

请注意,您将 URLConf 文件(通常默认为 urls.py)中的视图链接到模板中呈现的表单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM