gpt4 book ai didi

django - 在 django 的表单集中使用跨表单的单选按钮

转载 作者:行者123 更新时间:2023-12-02 02:23:10 25 4
gpt4 key购买 nike

我有一个页面,我在其中使用表单集显示不同的表单。

这些是我的模型:

class Phone(models.Model):
mac = models.CharField()

class PhoneLine(models.Model):
phone = models.ForeignKey(Phone)
voicemail = models.BooleanField("Voice Mail", default=False)

一部电话可以有多条线路(电话线),但只有一条电话线可以启用语音邮件。

默认情况下,当我使用表单集显示电话线时,语音邮件字段显示为复选框,如下所示。(我已根据要求在表单集中添加了前缀)

form1 of the formset
<input type="checkbox" name="phone_client_line_1-0-voicemail" id="id_phone_client_line_1-0-voicemail">

form2 of the formset
<input type="checkbox" name="phone_client_line_1-1-voicemail" id="id_phone_client_line_1-1-voicemail">

(复选框的选中和取消选中会更新后端)

基于此线程,Django - Show BooleanField in a formset as one group of radio buttons ,我修改了电话线表单的 init 和 add_prefix 方法,现在将语音邮件字段显示为单选按钮。

class PhoneLineForm(ModelForm):

def __init__ (self, *args, **kwargs):
super(PhoneLineForm, self).__init__(*args, **kwargs)
self.fields['voicemail'] = BooleanField( widget = RadioSelect(choices=((self.prefix+"-"+str("voicemail"), 'Voicemail LIne'),)))

def add_prefix(self, field):
if field == 'voicemail': return ('%s_%s') %(field, self.instance.phone.id)
else: return self.prefix and ('%s-%s' % (self.prefix, field)) or field

这会将 html 输出修改为以下内容:

form1 of the formset
<input type="radio" id="id_voicemail_1_0" value="phone_client_line_1-0-voicemail" name="voicemail_1">

form2 of the formset
<input type="radio" id="id_voicemail_1_0" value="phone_client_line_1-1-voicemail" name="voicemail_1">

如您所见,现在对于 radio 字段 voicemail_1,我拥有所选电话线的值。如果我提交此表单,在选择 voicemail_1 广播后,它不会更新数据库。

如何捕获提交时选择的电话线路的值?如果我覆盖phonelineform的save方法,它应该包含什么..?

对此的任何指示将不胜感激。谢谢!!

最佳答案

我实际上建议简化这一点,并依赖 JavaScript(如果用户选择了多个带有语音邮件的电话线路,则您始终可以验证服务器端并向用户显示一条消息,因为他们没有启用 JavaScript) .

这比尝试破解字段名称和值更简单。 Django 表单集在最好的情况下都很难解决,因此增加服务器端的复杂性通常不值得这么麻烦,特别是当问题可以通过一些明智的 jQuery 工作以一种不太不优雅的方式解决时.

$('input[name^="voicemail_"]').on('click',
function() {
$('input[name^="voicemail_"]').not($(this)).prop('checked', false);
}
);

只是一个粗略的建议;希望有用。

关于django - 在 django 的表单集中使用跨表单的单选按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11846954/

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