不过滤 ModelChoice 值的 Django-filter 和 Django-tables2 过滤器
Django-filter and Django-tables2 filter with ModelChoice values not filtering
我有一个使用 ModelChoiceFilter 的过滤器,来自名为 'semanas'(周)的数据库列,目前存储在那里的值是:
2020-W5
2020 年第 6 天
我的数据显示在 table (django-tables2) 中,当我 select 这两个值中的任何一个时,它确实空白,就像没有找到任何东西一样尽管我看到它们显示在 table.
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
这是一张显示过滤器值的图像
这是一个图像,其中一个过滤器的值是 selected:
我曾经有一个值“1”并且它有效,所以我不知道 2020-W06 中的破折号是否有一些效果。
谢谢!
我通过将字符串表示添加到模型中解决了这个问题。
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
我有一个使用 ModelChoiceFilter 的过滤器,来自名为 'semanas'(周)的数据库列,目前存储在那里的值是:
2020-W5 2020 年第 6 天
我的数据显示在 table (django-tables2) 中,当我 select 这两个值中的任何一个时,它确实空白,就像没有找到任何东西一样尽管我看到它们显示在 table.
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
这是一张显示过滤器值的图像
这是一个图像,其中一个过滤器的值是 selected:
我曾经有一个值“1”并且它有效,所以我不知道 2020-W06 中的破折号是否有一些效果。
谢谢!
我通过将字符串表示添加到模型中解决了这个问题。
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