django.forms生成HTML,python – 在django中为表单自动生成表单字段

我有一些模型,我想从这些数据生成一个多选形式.

因此,表单将包含每个类别的条目,选择将是该类别中的技能.

models.py

class SkillCategory(models.Model):

name = models.CharField(max_length=50)

class Skill(models.Model):

name = models.CharField(max_length=50)

category = models.ForeignKey(SkillCategory)

有没有办法自动生成表单字段?

我知道我可以在每个SkillCategory的表单中手动添加“SkillCategory”条目,但将其作为模型的原因是技能和技能类别可以自由编辑.

我想做这样的事情:

(我试过这个,但没有让它工作,不记得确切的错误…)

forms.py

class SkillSelectionForm(forms.Form):

def __init__(*args, **kwargs):

super(SkillSelectionForm, self).__init__(*args, **kwargs)

for c in SkillCategory.objects.all():

category_skills = [(pk, s.name) for s in c.skill_set.all()]

setattr(self, c.name, forms.MultipleChoiceField(choices=category_skills, widget=forms.CheckboxSelectMultiple))

这将使用SkillCategory.name创建表单字段条目,并将选项分配为Skill中的选项. field_name / display_name用于避免非ascii类别名称的问题.

forms.py

def get_categorized_skills():

skills = {}

for s in Skill.objects.values('pk', 'name', 'category__name').order_by('category__name'):

if s['category__name'] not in skills.keys():

skills[s['category__name']] = []

skills[s['category__name']].append((s['pk'], s['name']))

return skills

class SkillSelectionForm(forms.Form):

def __init__(self, *args, **kwargs):

super(SkillSelectionForm, self).__init__(*args, **kwargs)

skills = get_categorized_skills()

for idx, cat in enumerate(skills.keys()):

field_name = u'category-{0}'.format(idx)

display_name = cat

self.fields[field_name] = forms.MultipleChoiceField(choices=skills[cat], widget=forms.CheckboxSelectMultiple, label=display_name)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值