Я использую фильтры django для фильтрации данных и отображения их в таблице. Одним из значений является ForeignKey, который имеет в качестве pk UUID. Когда я использую lookup_expr='icontains', я получаю следующую ошибку:
«Связанное поле получило недопустимый поиск: icontains»
Как я могу использовать lookup_expr='icontains' для ForeignKey с UUID pk?
Заранее спасибо.
модели:
class Data(models.Model):
data_id = models.UUIDField(primary_key=True, default=uuid.uuid4)
data_device_id = models.ForeignKey(Device, models.SET_NULL, blank=True, null=True)
class Device(models.Model):
device_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=True)
device_name = models.CharField(max_length=64)
Фильтр:
class DataFilter(django_filters.FilterSet):
data_id = django_filters.CharFilter(label='Data id', lookup_expr='icontains')
data_device_id = django_filters.CharFilter(label='Device id', lookup_expr='icontains') #ERROR HERE
class Meta:
model = Data
fields = {'data_id','data_device_id'}
Вы должны указать, что __icontains
работает с первичным ключом, поэтому:
class DataFilter(django_filters.FilterSet):
data_id = django_filters.CharFilter(label='Data id', lookup_expr='icontains')
data_device_id = django_filters.CharFilter(
label='Device id',
lookup_expr='icontains',
# ↓ apply the lookup on the primary key
field_name='data_device_id__pk'
)
class Meta:
model = Data
fields = {'data_id','data_device_id'}