Django:如何将 RawQuerySet 分配给表单中的 Selectfield

Django: how to assign a RawQuerySet to a Selectfield in forms

在很多情况下,我将自定义查询集添加到 Django 形式的 select 字段。

form.fields[fieldname] = model.objects.all()

现在我有一个 select 字段,我需要在其中将 RawQueryset 的结果指定为选项。 我试过了(简化了查询集):

sql = "SELECT * FROM table WHERE value = %s"
param.append (1234)
qs = model.objects.raw (sql, param)
form.fields[fieldname] = qs

页面显示正确,select 字段包含来自查询集的数据。 当我尝试保存表单时,表单验证 (form.is_valid()) 抛出错误:

*** 属性错误:'RawQuerySet' 对象没有属性 'get'

我该如何解决这个问题? 谢谢

您不能将 queryset 分配给表单字段,如下所示:

# this is wrong
form.fields[fieldname] = qs

您需要使用 django 拥有的字段之一来定义字段,例如:

form.fields[fieldname] = forms.ModelChoiceField(queryset=qs)

django doc.