相关疑难解决方法(0)

在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)
Run Code Online (Sandbox Code Playgroud)

有没有办法自动生成表单字段?我知道我可以在每个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))
Run Code Online (Sandbox Code Playgroud)

这将使用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 …
Run Code Online (Sandbox Code Playgroud)

python django django-forms

9
推荐指数
1
解决办法
4794
查看次数

标签 统计

django ×1

django-forms ×1

python ×1