【问题标题】:How to save MultipleChoiceField to db如何将 MultipleChoiceField 保存到数据库
【发布时间】:2019-12-06 00:26:13
【问题描述】:

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

我知道如何创建 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})

当前页面加载时看起来像这样,这很好。下一步就是我如何将它保存到数据库中,所以我可以用他们之前选择的值再次显示它。

【问题讨论】:

  • 你如何在模型上定义它?
  • 我没有模型,因为我不确定如何在其中保存 MultipleChoiceField @Clarity

标签: django database


【解决方案1】:

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

您也可以查看PostgreSQL's Array field

【讨论】:

    【解决方案2】:

    我建议您使用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"]
    

    您可以将表单或模板自定义到您的链接

    【讨论】:

      【解决方案3】:

      在 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
      猜你喜欢
      • 2022-10-02
      • 2020-12-12
      • 1970-01-01
      • 2013-04-24
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      • 2013-05-08
      • 1970-01-01
      相关资源
      最近更新 更多