Django依赖下拉表单导致开机自检"invalid choice"



我正在使用本教程: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']。

相关内容

最新更新