【问题标题】:Error filtering a ForeignKey with UUID as pk过滤 UUID 为 pk 的 ForeignKey 时出错
【发布时间】:2020-12-21 18:33:18
【问题描述】:

我正在使用 django-filters 过滤数据并将其显示在表格中。其中一个值是具有 pk 的 UUID 的 ForeignKey。当我使用 lookup_expr='icontains' 时,我收到以下错误:

“相关字段的查找无效:​​icontains”

如何将lookup_expr='icontains' 用于带有UUID pk 的ForeignKey?

提前谢谢你。

型号:

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'}

【问题讨论】:

    标签: django django-filter


    【解决方案1】:

    您应该指定__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'}

    【讨论】:

      猜你喜欢
      • 2020-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-11
      • 2016-08-13
      • 2020-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多