【发布时间】:2020-01-27 23:16:12
【问题描述】:
我找到了相同问题的多个答案,但不幸的是,我似乎无法弄清楚:(
表单在我的模型“PhysicalPart”中有一个“子类别”字段的下拉列表,“子类别”字段的值在表单创建时动态更新(使用“类别”参数)。
不幸的是,我无法让下拉菜单显示所有子类别AND同时选择数据库中的一个。我似乎也无法从数据库中检索到“short_description”值。
在我了解 UpdateView 类并决定改用它之前,它曾经可以工作......
任何关于如何解决我的问题的见解将不胜感激!
forms.py
class PartForm(forms.ModelForm):
subcategory = forms.ChoiceField(choices=[])
class Meta:
model = PhysicalPart
fields = ['subcategory', 'short_description']
views.py
class PartUpdate(UpdateView):
model = PhysicalPart
template_name = 'part_update.html'
form_class = PartForm
def post(self, request, *args, **kwargs):
# Load model instance
self.object = self.get_object()
# Load form
form = super(PartUpdate, self).get_form(self.form_class)
# Populating subcategory choices
form.fields['subcategory'].choices = SubcategoryFilter[self.object.category]
# Check if form valid and save data
if form.is_valid():
form.save()
return redirect('part-list')
# Update context before rendering
context = self.get_context_data(**kwargs)
context['part_id'] = self.object.pk
context['part_category'] = self.object.category
context['manufacturing_list'] = self.object.manufacturing.all()
return render(request, self.template_name, context)
html
<form action="{% url 'part-update' pk=part_id category=part_category %}" method="post" style="display: inline">
{% csrf_token %}
<div class="form">
<p class="font-weight-bold">Type</br>
{{ form.subcategory }}
</p>
</div>
<div class="form">
<p class="font-weight-bold">Short Description</br>
{{ form.short_description }}
</p>
</div>
<button type="submit" class="btn btn-primary">Save</button>
</form>
<form action="{% url 'part-list' %}" style="display: inline">
<button type="submit" class="btn btn-danger">Cancel</button>
</form>
【问题讨论】:
-
你能展示你的模型吗?
-
@BleuBizarre 我不认为这个问题与我的模型有关,它只是一堆 CharField(也是“子类别”)。
-
为了能够理解您的模型。为什么您的子类别不是 ForeignKey?
-
在您强制选择过滤器的那一刻,您确定这有效吗?也许尝试使用一些随机值来仔细检查这是否不是你什么都看不到的原因
-
ForeignKey > 允许您拥有 OneToMany 关系,基本上它将所需类别的 ID 存储在数据库中,但是当您在 django 中请求它时,它将直接是与此 ID 相关的对象跨度>
标签: python django django-views