全部,
我是Django的新手,到目前为止一直表现不错,但是这个让我难过。我正在尝试将ModelChoiceField用于许多具有相同名称的记录。我正在使用Postgresql,所以我能够确定我需要使用distinct命令,这是完美的。我的下拉列表中的记录都被删除到每个记录的一个版本。但是,当我尝试获取特定记录的所有版本时,这就是我迷失的地方。如果我不通过DetailView使用distinct,我能够获得每条记录的详细信息,但我真的想在modelchoicefield之后获取屏幕上每条记录的所有版本。
这是我的表格:
class History(forms.Form):
dropdown = forms.ModelChoiceField(queryset=History.objects.all())
def __init__(self, user, *args, **kwargs):
super(History, self).__init__(*args, **kwargs)
self.fields['dropdown'].widget.attrs['class'] = 'choices1'
self.fields['dropdown'].empty_label = ''
qs = History.objects.all().distinct('record_name')
self.fields['dropdown'].queryset = qs
我最终试图通过我的模板在屏幕上查看查询集。我在模板中尝试了几个不同版本的代码,但似乎没有任何效果。如果我没有使用CBV DetailView,我可以获得所有记录的详细视图。但是,这不是我想要做的。我在模板中使用了几个版本的queryset命令,因为我发现了几个类似于我的问题,但似乎无法让它工作。我发现了一些类似于以下内容的引用:
{% for record in form.history.field.queryset %}
etc.
{% endfor %}
但似乎无法让它在我的Django模板中运行。任何和所有的帮助表示赞赏!提前谢谢!
答案 0 :(得分:0)
在这种情况下,我要么建议
a)将您的下拉字段的值放入您的网址匹配中。 See the django docs for named groups in URL。此外,您可以在下拉字段中添加onchange
事件,该字段会重定向到<current url>/<value of dropdown>
,或者只是更改链接到以下页面的(如果存在)按钮的值。 警告:使用此解决方案,您必须确保下拉字段的值与 url-format (django's slugify might be useful for this)匹配。
或
b)将您的下拉字段添加到输入表单或输入字段。然后,您可以使用以下内容提取下拉列表的值:
try:
dropdown_value = request.POST['dropdown-field-name'] # dict-error if field is not in request.POST
except:
# some error actions
然后您可以将此值作为过滤器添加到您的查询集中:
def get_queryset(self, dropdown_value=None):
# ...
qs = qs.filter('field-name' = dropdown_value) # possibly no/wrong results if dropdown_value is corrupted or manipulated