【发布时间】:2020-03-30 12:18:50
【问题描述】:
我的模型中有一个多对多字段ConnectedTo,我想使用表单创建对象。但是,当我将其列为字段时,我只会得到一个列表框,其中包含要突出显示的选项,而无法选择一个或多个。
理想情况下,我会喜欢一个多选复选框,其中包含滚动框中的项目列表。但我会从一个可选择的项目开始。
到目前为止,这是我的代码:
models.py:
class Part(models.Model):
PartID = models.AutoField(primary_key=True, unique=True)
SiteID = models.ForeignKey('Site', on_delete=models.CASCADE, null=True)
Comment = models.CharField(max_length=255, blank=True)
Subtype = models.ForeignKey('Subtype', on_delete=models.CASCADE, null=True)
Location = models.CharField(max_length=255, blank=True)
ConnectedTo= models.ManyToManyField('self', blank=True, null=True)
BatchNo = models.CharField(max_length=32, blank=False, null=True)
SerialNo = models.CharField(max_length=32,blank=True)
Manufacturer = models.CharField(max_length=32, blank=False, null=True)
Length = models.CharField(max_length=6, blank=True, null=True)
InspectionPeriod = models.IntegerField(blank=True, null=True)
LastInspected = models.DateField(blank=True, null=True)
InspectionDue = models.CharField(max_length=255, blank=True)
@classmethod
def create(cls, siteid, comment, subtype, location, batchno, serialno, manufacturer, length, inspectionperiod, lastinspected, inspectiondue):
part = cls(SiteID = siteid, Comment = comment, Subtype = subtype, Location = location, BatchNo = batchno, SerialNo = serialno, Manufacturer = manufacturer, Length = length, InspectionPeriod = inspectionperiod, LastInspected = lastinspected, InspectionDue = inspectiondue)
return part
def __str__(self):
return str(self.PartID)
forms.py:
class PartForm(forms.ModelForm):
class Meta:
model = Part
fields = ('Comment', 'Subtype', 'Location', 'ConnectedTo', 'BatchNo', 'SerialNo', 'Manufacturer', 'Length', 'InspectionPeriod', 'LastInspected')
views.py:
@login_required(login_url='/accounts/login/')
def addPartForm_Create(request, site, subtype):
siteselected = site
subtypeselected = Subtype.objects.get(SubtypeID = subtype)
if request.method == 'POST':
form = addPartForm(request.POST)
if form.is_valid():
obj = form.save(commit=False)
obj.SiteID = Site.objects.get(SiteID = siteselected)
obj.Subtype = subtypeselected
obj.save()
return redirect('/sites/'+str(site))
else:
form = addPartForm()
return render(request, 'myproj/addPart.html', {'form': form, 'SiteNo': Site.objects.get(SiteID = siteselected).SiteID, 'subtype': subtypeselected})
编辑:观点有误,抱歉。
编辑 2:我所说的突出显示框的示例:
更新:
Jey_Jen 的回答帮助我获得了我想要的风格。我现在有一个多选复选框。但 ConnectedTo 属性不保存。保存模型中的所有其他内容并创建一个新零件。但没有多对多链接。
【问题讨论】:
-
“突出显示的选项”是选择它们,确定吗?
-
不,不是。我附上了截图以进一步澄清
-
@DanielRoseman 我还检查了我的数据库表,以澄清在后台没有建立连接关系,以防我的 html 没有显示任何发生的事情。看起来那个盒子的引擎盖下绝对没有发生任何事情。
-
就像我说的,这是你可以选择的;这是浏览器呈现多选的默认方式(即
<select type="multiple">。)
标签: python django django-models django-forms django-views