I'm using django-filters to filter data and display it in a table. One of the values is a ForeignKey that has as pk an UUID. When I use lookup_expr='icontains' then I get the following error:
"Related Field got invalid lookup: icontains"
How can I use lookup_expr='icontains' for a ForeignKey with a UUID pk?
Thank you in advance.
models:
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)
Filter:
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'}
You should specify that the __icontains
works on the primary key, so:
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'}