【问题标题】:How can i display my RadioSelect Widget in django我如何在 django 中显示我的 RadioSelect 小部件
【发布时间】:2020-07-24 13:10:03
【问题描述】:

我有一个模型、表单、视图,但我似乎无法实际显示 RadioSelect 小部件。它没有显示任何内容,我认为除了视图之外一切都很好,但是,我不确定。 我基本上希望有人从两个单选按钮中进行选择和选择,提交然后能够注册为两个选项之一,但就像我说的那样,我什至无法显示按钮。

views.py

def registration(request):
    reg = Registration.objects.all()
    return render(request, 'HTML/Registration.html', {"reg":reg})

models.py

class Registration(models.Model):
    OPTIONS = (
            ('COUNS','Counsellor'),
            ('CLIENT','Client'),
            )
    SELECT = models.CharField(max_length=15,
                        choices=OPTIONS)

forms.py

class Registration(forms.ModelForm):
class Meta:
    model = Registration
    fields = '__all__'
    widgets = {'SELECT': forms.RadioSelect}

HTML

<form method="POST">
 {% csrf_token %}
<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 
border-bottom">
 <h1 class="h2">Registration</h1>
</div>

{% render_field reg.SELECT %}

<div class="form-row">
  <div class="col pt-md-2">
    <input type="submit" value="Next" class="btn btn-primary" style="float: right;">
  </div>
</div>
</form>

【问题讨论】:

  • 您指的是模型,而不是表单。请不要为模型和表单提供相同的名称。在表单中添加后缀 Form 是很常见的。

标签: django django-models django-views django-widget


【解决方案1】:

您指的是模型,而不是表单。请不要为模型和表单提供相同的名称。在表单中添加后缀 Form 是很常见的。

# app/forms.py

from django import forms
from app.models import Registration

class RegistrationForm(forms.ModelForm):
    class Meta:
        model = Registration
        fields = '__all__'
        widgets = { 'SELECT': forms.RadioSelect }

然后在视图中,你可以创建这样的表单:

# app/views.py

from app.forms import RegistrationForm
from django.shortcuts import redirect

def registration(request):
    if request.method == 'POST':
        reg = RegistrationForm(request.POST, request.FILES)
        if reg.is_valid():
            reg.save()
            return redirect('name-of-some-view')
    else:
        reg = RegistrationForm()
    return render(request, 'HTML/Registration.html', {'reg': reg})

注意:如果 POST 请求成功,请发送redirect [Django-doc] 实施Post/Redirect/Get pattern [wiki]。 这样可以避免在用户刷新时发出相同的 POST 请求 浏览器。

【讨论】:

  • 在我所有的表格中,只有最后一个没有表格,感谢您发现这一点。它现在显示。
猜你喜欢
  • 2011-11-29
  • 2011-10-04
  • 2014-05-12
  • 1970-01-01
  • 2020-12-02
  • 2020-12-04
  • 1970-01-01
  • 2012-07-18
  • 2014-12-30
相关资源
最近更新 更多