我想创建一个设置页面,用户可以在其中选择他们拥有的技能的多个值。它将具有一个主要类别,然后是子类别。我需要将它们保存到数据库中,以便查询它们并再次显示他们选择的技能。
我知道如何创建MultipleChoiceField,但不知道如何将它们保存到数据库。我该怎么办?
Forms.py
from django import forms
class skills(forms.Form):
jobs = [
('Håndværker', (
('Gulv', 'Gulv'),
('Væg', 'Væg'),
)
),
('Murer', (
('Mur', 'Mur'),
('blabla', 'blabla'),
)
),
]
job = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple,
choices=jobs)
Views.py
from .forms import skills
def index(request):
if request.method == 'POST':
form = skills(request.POST)
if form.is_valid():
picked = form.cleaned_data.get('job')
# do something with your results
else:
form = skills
return render(request, 'settings/index.html', {"form":form})
答案 0 :(得分:0)
由于您尚未设置任何模型,因此可以查看django-multiselectfield,它将存储所选的选项“作为逗号分隔值的CharField”。然后,您只需要从表单中传递这些值即可。
或者,您可以查看PostgreSQL's Array field。
答案 1 :(得分:0)
我建议您使用Jobs
模型和Skills
模型。然后在工作模型上有一个技能字段,该字段将是技能模型的ManyToManyField
。然后,Django可以ModelForm
的形式自动为您生成表单。
# Create your models here.
class Skill(models.Model):
name = models.CharField(max_length=20, null=False, blank=False)
def __str__(self):
return self.name
class Job(models.Model):
name = models.CharField(max_length=20, null=False, blank=False)
skills = models.ManyToManyField(Skill)
def __str__(self):
return self.name
class Person(models.Model):
name = models.CharField(max_length=20, null=False, blank=False)
skills = models.ManyToManyField(Skill)
def __str__(self):
return self.name
然后您可以将它们作为
添加到数据库中。skill1 = Skill.objects.create(name="Skill One")
skill2 = Skill.objects.create(name="Skill Two")
skill3 = Skill.objects.create(name="Skill Three")
skill4 = Skill.objects.create(name="Skill Four")
job1 = Job.objects.create(name="Job One")
job1.skills.add(skill1)
job1.skills.add(skill2)
job2 = Job.objects.create(name="Job Two")
job2.skills.add(skill3)
job2.skills.add(skill4)
具有要显示的表单
class PersonForm(forms.ModelForm):
class Meta:
model = Person
fields = ["name", "skills"]
您可以将表单或模板自定义为链接
答案 2 :(得分:0)
在models.py中只需使用CharField创建字段
from django.db import models
class UserProfileInfo(models.Model):
Gender = models.CharField(max_length=10,default='')
在forms.py中只需创建如下所示的选择
class UserProfileInfoForm(forms.ModelForm):
YESNO_CHOICES = (('male', 'male'), ('female', 'female'))
Gender = forms.ChoiceField(choices=YESNO_CHOICES)
class Meta():
model = UserProfileInfo
fields = ('Gender',)
在views.py中导入并显示此表单。
或者您绝对可以选择