嘿!
我想在我的 django 管理区域中有一个字段,用户可以从数据库中的给定选项中进行选择。例如,获取国家列表并选择一个。但我总是会得到'选择一个有效的选择。那个选择不是可用的选择之一。尝试保存新实例时出错。
#models.py
class PlaceSection(models.Model):
code = models.CharField(max_length=1)
def code_str(self):
return self.code
# admin.py
class InstiForm(forms.ModelForm):
place_sections = forms.ModelChoiceField(
PlaceSection.objects.values(),
widget=Select2Widget,
)
class Meta:
model = Something
fields = [
"place_section"]
class InstiAdmin(admin.ModelAdmin):
form = InstiForm
save_on_top = True
def save_model(self, request, obj, form, change):
fieldsets = [
(
("General"),
{"fields": [
"place_sections"
]
}
)
]
我确实在管理下拉列表中得到了正确的选择,但是当我选择一个并保存时,就会发生错误。
有没有人知道如何解决这个问题(在管理员中)发现只有类似的问题没有管理部分并且没有解决方案对我有用。
非常感谢您的帮助!:)
编辑:
我在我的管理区域中修复了这个问题,但现在无法在我的表单/视图中过滤 PlaceSection。需要的字段在那里,但在“搜索”之后,TypeError 'PlaceSection' 对象不可迭代。它似乎是 NoneType 并且是空的,但我不明白我做错了什么。
任何进一步的帮助也将不胜感激!:)
# forms.py
class SearchForm(forms.Form):
place_sections = forms.ModelMultipleChoiceField(
queryset=PlaceSection.objects.all(), widget=Select2MultipleWidget, required=False)
# views.py
def search_institution(request):
if request.method == "POST":
form = SearchForm(request.POST)
if form.is_valid():
query = filter_query(form)
context = {"result_data": serialize(query), "form": form, "show_form": False}
return render(request, "stakeholders/search_form.html", context)
else:
form = SearchForm()
context = {
"result_data": serialize(Institution.objects.all()),
"form": form,
"show_form": True
}
return render(request, "stakeholders/search_form.html", context)
# query.py
def filter_query(form):
query = Institution.objects.all()
if form.cleaned_data["place_sections"]:
place_sections_query = Institution.objects.none()
for section in form.cleaned_data["place_sections"]:
place_sections_query = (
place_sections_query
| Institution.objects.filter(place_sections__in=section)
)
query = query.intersection(place_sections_query)
return query