这已经超过7小时没有成功。现在我不知道为什么。Django:无法从选项菜单中预先选择开机自检后
我有两种形式,this screenshot应该给我找的流动非常好的迹象。
因此,基本上,用户从BottleForm的下拉菜单中现有的项目之一(标示的截图为“1”)要么,或者他选择单击Add按钮,打开另一种形式BrandForm的模式(在截图中标记为“2”),这应该让他填补一个新的品牌名称。
我想要的是,当一个新的品牌名称在BrandForm提交并重新加载页面,该品牌已经在下拉菜单中预选。我读过无数个帖子,但没有关于在现场工作中设置initial
的建议答案。
为什么它不起作用?
views.py(add_brand
对于BrandForm提交名称):
# Add brand form
elif 'add_brand' in request.POST:
brand_name = request.POST['name'] # this is the brand name we submitted
context['form'] = BottleForm(initial={'brand': brand_name})
context['form2'] = BrandForm(request.POST)
the_biz = Business.objects.filter(owner=user.id).first()
if context['form2'].is_valid():
print("brand for valid!")
brand = context['form2'].save(commit=False)
brand.business = the_biz
brand.save()
return render(request, template_name="index.pug", context=context)
bottle_form.pug:
//- Create New Brand Modal
div.modal.fade.create-new-brand(tabindex="-1" role="dialog")
div.modal-dialog.modal-sm(role="document")
div.modal-content
div.modal-header
H3 Enter the Brand's name here:
div.modal-body
form.form-horizontal(method="post" action=".")
| {% csrf_token %}
| {{ form2.as_p }}
hr
btn.btn.btn-default(type="button" data-dismiss="modal") Close
input.btn.btn-primary(type="submit" value="submit")(name="add_brand") Add Brand
models.py:
class Brand(models.Model):
name = models.CharField(max_length=150, blank=False)
business = models.ForeignKey(Business, on_delete=models.CASCADE, related_name="brands")
permissions = (
('view_brand', 'View the brand'),
('del_brand', 'Can delete a brand'),
('change_brand', 'Can change a brand\'s name'),
('create_brand', 'Can create a brand'),
)
def __str__(self):
return self.name
class Bottle(models.Model):
name = models.CharField(max_length=150, blank=False, default="")
brand = models.ForeignKey(Brand, on_delete=models.CASCADE, related_name="bottles")
vintage = models.IntegerField('vintage', choices=YEAR_CHOICES, default=datetime.datetime.now().year)
capacity = models.IntegerField(default=750,
validators=[MaxValueValidator(2000, message="Must be less than 2000")
,MinValueValidator(50, message="Must be more than 50")])
slug = models.SlugField(max_length=550, default="")
@property
def age(self):
this_year = datetime.datetime.now().year
return this_year - self.vintage
permissions = (
('view_bottle', 'View the bottle'),
('del_bottle', 'Can delete a bottle'),
('change_bottle', 'Can change a bottle\'s name'),
('create_bottle', 'Can create a bottle'),
)
def __str__(self):
return self.name + " " + self.brand.name + " " + str(self.capacity) + " " + str(self.vintage)
def save(self, *args, **kwargs):
# if there's no slug, add it:
if self.slug == "":
self.slug = str(slugify(str(self.name)) + slugify(str(self.brand)) + str(self.vintage) + str(self.capacity))
super(Bottle, self).save(*args, **kwargs)
如果需要更多细节,请告诉我。这真让我抓狂。
BTW:我不知道Django是如何加载选项的下拉菜单。