Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 如何将MultipleChiceField保存到db_Django_Database - Fatal编程技术网

Django 如何将MultipleChiceField保存到db

Django 如何将MultipleChiceField保存到db,django,database,Django,Database,我想创建一个设置页面,用户可以在其中选择多个技能值。它将有一个主类别,然后是子类别。我需要将它们保存到我的数据库中,以便查询它们并再次显示它们所选的技能集 我知道如何创建multipleechoicefield,但不知道如何将它们保存到数据库中。我该怎么说呢 Forms.py from django import forms class skills(forms.Form): jobs = [ ('Håndværker', ( ('Gulv', 'Gu

我想创建一个设置页面,用户可以在其中选择多个技能值。它将有一个主类别,然后是子类别。我需要将它们保存到我的数据库中,以便查询它们并再次显示它们所选的技能集

我知道如何创建multipleechoicefield,但不知道如何将它们保存到数据库中。我该怎么说呢

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})
当前页面加载时是这样的,这很好。下一步就是如何将其保存到数据库中,这样我就可以再次显示它们以前选择的值。

由于您还没有任何模型设置,您可以查看,它将所选选项存储为“逗号分隔值的字符域”。然后您只需要从表单中传递这些值


或者你也可以研究一下

我建议您拥有
工作
模式和
技能
模式。然后在工作模型上有一个技能字段,它将是技能模型的
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"]

您可以在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中导入此表单并显示它

或者你也可以去


您是如何在模型上定义它的?我没有模型,因为我不知道如何在那里保存multipleechoicefield@Clarity