如何使用multipleEchoiceField创建django表单并将这些值添加到数据库中

如何使用multipleEchoiceField创建django表单并将这些值添加到数据库中,django,django-models,django-forms,django-views,Django,Django Models,Django Forms,Django Views,我想实现的是,用户将在表单1)名称2)下拉列表中提交3个输入以选择技术人员,3)多选下拉列表以选择多个产品。一旦用户提交了详细信息 它将在数据库中生成一个lead,其值为不同表中选定技术人员的姓名、外键和选定产品的id。我不知道如何实现这一点,下面我已经提到了实现我想要的方法。请让我知道模型是否需要任何更改,以及我如何为相同的模型编写视图 models.py class product(models.Model): name = models.CharField(max_length=

我想实现的是,用户将在表单1)名称2)下拉列表中提交3个输入以选择技术人员,3)多选下拉列表以选择多个产品。一旦用户提交了详细信息 它将在数据库中生成一个lead,其值为不同表中选定技术人员的姓名、外键和选定产品的id。我不知道如何实现这一点,下面我已经提到了实现我想要的方法。请让我知道模型是否需要任何更改,以及我如何为相同的模型编写视图

models.py

class product(models.Model):

    name = models.CharField(max_length=20)

class technician(models.Model):

    name = models.CharField(max_length=20)

class lead(models.Model):

    name = models.CharField(max_length=20)
    technician = models.ForeignKey(technician,on_delete=models.SET_NULL,null=True) #only single selection
    products = models.ManyToManyField(product) #user can select multiple product in dropdown
form.py

class leadForm(form.ModelForm):

    products = forms.MultipleChoiceField(queryset=Product.objects.all())
    technician = forms.CharField(max_length=30,choices=[(i.id,i.name) for i in Technician.objects.all().values('id','name') 
    class Meta:
        model = lead
        fields = ('name','technician')
你应该在这里用一个。但是实际上,您不需要自己实现这些模型。您可以简单地让Django逻辑为您完成工作

为了在HTML端提供文本表示,您可以覆盖模型的
\uuuuu str\uuuu
函数:

class Product(models.Model):
    name = models.CharField(max_length=20)

    def __str__(self):
        return self.name

class Technician(models.Model):
    name = models.CharField(max_length=20)

    def __str__(self):
        return self.name

class Lead(models.Model):
    name = models.CharField(max_length=20)
    technician = models.ForeignKey(Technician, on_delete=models.SET_NULL, null=True)
    products = models.ManyToManyField(Product)
注意:类通常用
PamelCase
编写,因此以U开头

您可以在此处使用基于类的示例:

from django.views.generic.edit import CreateView
from app.models import Lead
from app.forms import LeafForm

class LeadCreateView(CreateView):
    model = Lead
    form_class = LeadForm
    template_name = 'create_lead.html'
来自django.views.generic.edit导入CreateView
从app.models导入Lead
从app.forms导入LeafForm
类LeadCreateView(CreateView):
型号=铅
form_class=铅制

template_name='create_lead.html'
你认为我的模型结构能实现我想要的吗?你能和我共享html文件吗?bcoz,我可以在管理面板中创建lead,但不使用html。我没有收到任何错误,我的multichoicefield得到了产品中值的重复次数(例如产品值为3,下拉列表为3)。我正在共享我的HTML代码片段{{form.product_name}}这是我的产品字段,位于带有method='POST'的表单标记内。我没有收到任何错误,但无法填充数据库。{form.products}
from django.views.generic.edit import CreateView
from app.models import Lead
from app.forms import LeafForm

class LeadCreateView(CreateView):
    model = Lead
    form_class = LeadForm
    template_name = 'create_lead.html'