如何将多选字段保存到数据库中

3
我希望创建一个设置页面,让用户可以选择其拥有的多种技能。这个页面将有一个主要类别和子类别。我需要把这些保存到我的数据库中,以便查询并再次显示所选的技能组合。
我知道如何创建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})

页面加载时展示的效果目前看起来很好。下一步是将其保存到数据库中,这样我就可以再次显示它们之前选择的值。 示例


你是如何在模型上定义它的? - Clarity
我没有模型,因为我不确定如何在其中保存MultipleChoiceField @Clarity - Lesnie Sncheider
3个回答

0

由于您还没有设置任何模型,因此您可以查看django-multiselectfield,它将选择的选项“作为逗号分隔值的CharField”存储。然后,您只需要从表单中传递这些值。

或者,您可以查看PostgreSQL的Array字段


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"]

您可以根据自己的喜好自定义表单或模板


0

在 models.py 中只需使用 CharField 创建字段

from django.db import models
class UserProfileInfo(models.Model):
    Gender = models.CharField(max_length=10,default='')

在 forms.py 中,只需创建以下 CHOICE 即可。
class UserProfileInfoForm(forms.ModelForm):
    YESNO_CHOICES = (('male', 'male'), ('female', 'female'))
    Gender = forms.ChoiceField(choices=YESNO_CHOICES)
    class Meta():
         model = UserProfileInfo
         fields = ('Gender',)

在views.py中导入这个表单并显示它。
或者你可以选择:

https://pypi.org/project/django-multiselectfield/


问题是指的是MultipleChoiceField,而不是ChoiceField。 - Tiago Geada

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接