我正在尝试使用下拉表单过滤基于用户的ListView.
models.py
class Post(models.Model):
...
author = models.ForeignKey('auth.User', verbose_name="Post Author")
Run Code Online (Sandbox Code Playgroud)
views.py
class PostList(ListView):
model = Post
context_object_name = 'posts'
def get_queryset(self):
result = super(PostList, self).get_queryset()
author_filter = self.request.GET.get('author')
if author_filter:
result = Post.objects.filter(Q(author__icontains=author_filter))
return result
Run Code Online (Sandbox Code Playgroud)
post_list.html
<form action="" method="get">
<select name="author" onchange="this.form.submit();">
<option selected="selected" disabled>Select an author</option>
{% all_author as authors %}
{% for author in authors %}
<option value="{{ author }}">{{ author }}</option>
{% endfor %}
</select>
</form>
Run Code Online (Sandbox Code Playgroud)
我正在使用自定义模板标记进行渲染all_authors
,这很好用.选择作者时,在网址中我可以看到传递的内容(/?author = xxx),但列表未被过滤.
编辑
根据andi的建议,我使用django过滤器以这种方式工作.但由于某些原因fields = ['field_name',]
filter.py没有考虑在内,所以我在模板中单独选择字段. …
我有一个表单来创建一个对象,其中日期输入格式为“dd/mm/yyyy”,当我提交表单时,保存它没有任何问题,但是当我编辑此对象时,日期显示为“yyyy-mm” -dd'。
设置.py
DATE_INPUT_FORMATS = ('%d/%m/%Y')
Run Code Online (Sandbox Code Playgroud)
表格.py
class MyForm(forms.ModelForm):
created_date = forms.DateField(input_formats=['%d/%m/%Y',],
widget=forms.DateInput(attrs={'class':'datepicker form-control', 'placeholder':'Select a date'}), required=False)
Run Code Online (Sandbox Code Playgroud)
模型.py
created_date = models.DateField(blank=True, null=True, verbose_name="Created on")
Run Code Online (Sandbox Code Playgroud)
视图.py
class MyEdit(SuccessMessageMixin, UpdateView):
model = MyModel
form_class = MyForm
template_name_suffix = '_edit'
success_message = '...'
Run Code Online (Sandbox Code Playgroud)
在我的模板中我使用
$(".datepicker").datepicker({
format: 'dd/mm/yyyy',
autoclose: true,
changeYear: true,
changeMonth: true
});
Run Code Online (Sandbox Code Playgroud) 我不知道如何为我的表单集进行自定义验证。我试图阻止用户在同一年选择超过 12 次,但是当我打印它时,cleaned_data 作为每个表单的不同字典出现。
我想将所有形式分组到 1 个字典中,以检查一年是否出现超过 12 次,或者以更好的方式编写。
我的代码:
表格.py
class SellerResultForm(forms.ModelForm):
class Meta:
model = SellerResult
fields = ('month', 'year', 'result',)
widgets = {
'month': forms.Select(attrs={'class': 'form-control',}),
'year': forms.Select(attrs={'class': 'form-control',}),
'result': forms.TextInput(attrs={'class': 'form-control',}),
}
def has_changed(self): #used for saving data from initial
changed_data = super(SellerResultForm, self).has_changed()
return bool(self.initial or changed_data)
def clean(self):
cleaned_data = super(SellerResultForm, self).clean()
print(cleaned_data)
# prints a set of dictionaries
# {'month': 4, 'year': 2017, 'id': 1, 'result': 1000}
# {'month': 5, 'year': 2017, 'id': …
Run Code Online (Sandbox Code Playgroud)