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