gpt4 book ai didi

python - django 表单单选输入布局

转载 作者:太空狗 更新时间:2023-10-29 21:23:01 26 4
gpt4 key购买 nike

解决这个问题的“djangoy”方法是什么:

在我的表单类中,我有一个 forms.ChoiceField,其小部件是一个 forms.RadioSelect 小部件,其中一个选项需要使用内联文本输入(这也是表单中的一个字段)来呈现。当未选择其单选选项时,我正在使用自定义验证来忽略文本字段。呈现后,我希望它显示如下:

<ul>
<li><label for="id_rad_0"><input type="radio" id="id_rad_0" value="none" name="rad" /> No Textbox</label></li>
<li><label for="id_rad_1"><input type="radio" id="id_rad_1" value="one" name="rad" /> One Textbox: <input type="text" name="bar" id="id_bar" /></label></li>
</ul>

但是,我不能简单地在我的模板中生成它,因为单选选项没有公开。如果不将我的表单与我的模板紧密耦合,或者将所有表示逻辑放在表单类中,我看不出有什么方法可以做到这一点。解决此问题的正确方法是什么?

编辑

我意识到上述问题可能只是一个晦涩难懂的问题,但我不确定我还能提供哪些其他信息来激励别人帮助我解决这个问题。我是一个比网页设计师更好的后端程序员,而且我一个人在做这个项目,所以也许是缺乏教育——我所描述的仅仅是糟糕的设计吗?我应该以不同的方式设计它吗?我真的很乐意接受这里的任何建议,以帮助我克服这个问题。

编辑2

根据请求,当前代码已缩短以保持理智,名称已更改以保护无辜者:

# forms.py
from myapp.models import RatherComplicatedModel
from django import forms

class RatherComplicatedForm(forms.ModelForm):
#various and sundry code...
RADIO_CHOICES = (
('none', "No Textbox"),
('one', "One Textbox: "),
)
# although I've abbreviated the model, 'rad' does not appear in the model;
# it merely provides input to the un-provided clean function
rad = forms.ChoiceField(widget=forms.RadioSelect(),choices=RADIO_CHOICES)

class Meta:
model = RatherComplicatedModel

-

# models.py
from django.db import models

class RatherComplicatedModel(models.Model):
#some other stuff...
bar = models.IntegerField(blank=True,null=True)

最佳答案

如果我正确理解你的问题,你可以访问模板中的选择元组:

<ul>
{# Assuming {{ field }} here is {{ form.rad }} #}
{% for choice in field.field.choices %}
<li>
<label for="id_{{ field.html_name }}_{{ forloop.counter0 }}">
<input type="radio"
id="id_{{ field.html_name }}_{{ forloop.counter0 }}"
value="{{ choice.0 }}"
name="{{ field.html_name }}" />
{{ choice.1 }}
{% if choice.0 == 'one' %}
{# Necessary field here #}
{{ form.bar }}
{% else %}
No Textbox
{% endif %}
</label>
</li>
{% endfor %}
</ul>

关于python - django 表单单选输入布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6218299/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com