Я использую django table2 и django_filters для фильтрации полей значений, находящихся в таблице.
мои модели:
class Woo_Orders(models.Model):
oid = models.IntegerField("oid",null=True)
site=models.ForeignKey(Site, null=True,blank=True,verbose_name="Site", on_delete = models.CASCADE)
class Site(models.Model):
ref_prefix = models.CharField(max_length=20, blank=True, null=True,verbose_name="REF")
Модель Site
соответствует модели Woo_Orders
.
мой стол:
class WooOrderTable(tables.Table):
ref_prefix = tables.Column(accessor='site.ref_prefix',verbose_name= 'Ref Prefix')
class Meta:
model = Woo_Orders
template_name = 'django_tables2/bootstrap4.html'
exclude = (...,...)
sequence = ('ref_prefix',...,...)
def render_ref_prefix(self,record):
#site prefix + oid
concatenated_prefix = record.site.ref_prefix + str(record.oid)
return '%s' % (concatenated_prefix)
Возвращаемое значение представляет собой объединенное значение oid
из модели Woo_Orders
плюс значение ref_prefix
из модели Site
.
Моя проблема в том, что я не знаю, как вернуть объединенное значение при фильтрации по полю ref_prefix
.
мой фильтр:
class WooOrderFilter(django_filters.FilterSet):
site__ref_prefix = django_filters.CharFilter(lookup_expr='icontains')
class Meta:
model = Woo_Orders
fields = ['site__ref_prefix']
Фильтр «улавливает» только часть ref_prefix
модели Site
, а не все конкатенированное значение, как я хочу.
Как я могу исправить часть фильтра для поиска на основе объединенного значения?