【问题标题】:Django-filter and Django-tables2 filter with ModelChoice values not filteringDjango-filter 和 Django-tables2 过滤器,ModelChoice 值未过滤
【发布时间】:2020-02-10 23:05:49
【问题描述】:

我有一个使用来自名为“semanas”(周)的 DB 列中的 ModelChoiceFilter 的过滤器,目前存储在那里的值是:

2020-W5 2020-W6

我将数据显示在表格 (django-tables2) 中,当我选择这两个值中的任何一个时,它确实为空白,就像它没有找到任何东西一样,即使我看到它们显示在表格中。

filters.py

class PagosFilter(django_filters.FilterSet):
    semana = django_filters.ModelChoiceFilter(
        queryset=Pagos.objects.values_list('semana', flat=True).distinct())

    class Meta:
        model = Pagos
        fields = ['semana', ]

models.py

class Pagos(models.Model):

    carro = models.ForeignKey(
        Carros, on_delete=models.CASCADE, blank=False, null=False)
    pago = models.DecimalField(max_digits=6, decimal_places=2)
    fecha = models.DateField(
        auto_now=False, auto_now_add=False, blank=True, null=True)
    semana = models.CharField(max_length=20)
    startweek = models.DateField(
        auto_now=False, auto_now_add=False, blank=True, null=True)
    endweek = models.DateField(
        auto_now=False, auto_now_add=False, blank=True, null=True)
    renta = models.ForeignKey(
        Renta, on_delete=models.PROTECT, blank=False, null=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        verbose_name_plural = "Pagos"

    def get_absolute_url(self):
        return reverse('pagos')

tables.py

class PagosTable(tables.Table):

    detalles = TemplateColumn(
        '<a class="btn btn btn-info btn-sm" href="{% url "pagos_edit" record.id %}">Abrir</a>')

    class Meta:
        model = Pagos
        template_name = "django_tables2/bootstrap-responsive.html"
        fields = ('carro', 'pago', 'fecha', 'semana', 'renta')
        attrs = {"class": "table table-hover table-sm"}

views.py

class PagosListView(SingleTableMixin, FilterView):
    model = Pagos
    table_class = PagosTable
    template_name = 'AC/payments.html'
    filterset_class = PagosFilter
    paginate_by = 10

这是显示过滤器值的图像

这是选择过滤器值之一后的图像:

我以前的值是“1”,但它起作用了,所以我不知道 2020-W06 中的破折号是否会起作用。

谢谢!

【问题讨论】:

    标签: django django-models django-filter django-tables2


    【解决方案1】:

    我通过向模型添加字符串表示来解决问题。

    models.py

    class Pagos(models.Model):
    
        carro = models.ForeignKey(
            Carros, on_delete=models.CASCADE, blank=False, null=False)
        pago = models.DecimalField(max_digits=6, decimal_places=2)
        fecha = models.DateField(
            auto_now=False, auto_now_add=False, blank=True, null=True)
        semana = models.CharField(max_length=20)
        startweek = models.DateField(
            auto_now=False, auto_now_add=False, blank=True, null=True)
        endweek = models.DateField(
            auto_now=False, auto_now_add=False, blank=True, null=True)
        renta = models.ForeignKey(
            Renta, on_delete=models.PROTECT, blank=False, null=False)
        created_at = models.DateTimeField(auto_now_add=True)
        updated_at = models.DateTimeField(auto_now=True)
    
        class Meta:
            verbose_name_plural = "Pagos"
    
        def get_absolute_url(self):
            return reverse('pagos')
    
        def __str__(self):
            return self.semana
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-17
      • 2021-04-02
      • 2018-09-18
      相关资源
      最近更新 更多