小编rob*_*s88的帖子

在Django中使用下拉列表过滤ListView的最佳方法

我正在尝试使用下拉表单过滤基于用户的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没有考虑在内,所以我在模板中单独选择字段. …

django listview filter

4
推荐指数
1
解决办法
4061
查看次数

Django 中 UpdateView 的日期格式更改

我有一个表单来创建一个对象,其中日期输入格式为“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)

python django datetime datepicker

4
推荐指数
1
解决办法
2311
查看次数

Django中表单集的自定义验证

我不知道如何为我的表单集进行自定义验证。我试图阻止用户在同一年选择超过 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)

python django formset

2
推荐指数
1
解决办法
2263
查看次数

标签 统计

django ×3

python ×2

datepicker ×1

datetime ×1

filter ×1

formset ×1

listview ×1