我正在使用本教程:https://simpleisbetterthancomplex.com/tutorial/2018/01/01/29/how-to-to-to-to-to-mimplement-dlipper----------------使用django.html
要在我的表单中添加依赖的下拉列表,但是当我发布数据时,它会出现无效的选择错误。
在我的形式的 init 覆盖中,如果我消除了下拉式queryset,则可以奏效,但这会破坏目的。
我的观点:
def add_have(request, id=None):
if request.method == "POST":
print("User: {}".format(request.user))
for key, value in request.POST.items():
print('{}: {}'.format(key, value) )
form = HaveForm(request.POST)
if form.is_valid():
model_instance = form.save(commit=False)
model_instance.profile = request.user
model_instance.save()
else:
print(form.errors)
print("FORM IS INVALID")
return redirect('display_have_list')
else:
form = HaveForm()
return render(request, 'add_have.html', {'form': form})
我的表格:
class HaveForm(forms.ModelForm):
class Meta:
model = Have
fields = ['category', 'item']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['category'].queryset=Category.objects.all()
self.fields['item'].queryset = Items.objects.none()
我的模型:
class Category(models.Model):
name = models.CharField(max_length=200)
class Items(models.Model):
name = models.CharField(max_length=200)
category = models.ForeignKey('Category', on_delete=models.SET_NULL, null=True)
description = models.TextField(max_length=1000)
class Have(models.Model):
profile = models.ForeignKey('users.Profile', on_delete=models.SET_NULL, null=True)
category = models.ForeignKey('Category', on_delete=models.SET_NULL, null=True)
item = models.ForeignKey('Items', on_delete=models.SET_NULL, null=True)
我收到的错误消息意味着它没有加载项目:
web_1 | User: <my_username>
web_1 | csrfmiddlewaretoken: <my_token>
web_1 | category: 1
web_1 | item: 4496
web_1 | <ul class="errorlist"><li>item<ul class="errorlist"><li>Select a valid choice. That choice is not one of the available choices.</li></ul></li></ul>
web_1 | FORM IS INVALID
web_1 | [31/Jul/2019 09:01:24] "POST /trade/add_have/ HTTP/1.1" 302 0
web_1 | [31/Jul/2019 09:01:24] "GET /trade/display_have_list/ HTTP/1.1" 200 2638
web_1 | [31/Jul/2019 09:01:24] "GET /static/css/styles.css HTTP/1.1" 404 1767
如果我从初始化中消除项目queryset,则可以保存正常。我知道这个问题在于我初始化表单的方式,但我不确定如何修复它。
共享模型可能有助于指出答案。我猜那是模型中的字段项目不允许零值。当您做self.fields ['item']。querySet = items.objects.none((,然后使用该表单该项目的值将为null,并且形式将无效。
您可以更改字段以允许null,然后可以继续逐步实现该示例。
此外,假设类别是外键,self.fields ['category']。