【问题标题】:Filtering issue in DRFDRF 中的过滤问题
【发布时间】:2020-12-10 04:52:50
【问题描述】:

我遇到的问题如下: TypeError: init() 得到了一个意外的关键字参数 'name' "GET /apartmentimages/ HTTP/1.1" 500 136691

我有这样一个model.py类:

class Apartment(models.Model):
    apartment_title = models.CharField(max_length=200)
    apartment_description = models.TextField()
    apartment_location = models.CharField(max_length=200)
    apartment_people_quantity = models.PositiveIntegerField()
    apartment_price = models.CharField(max_length=200)
    apartment_type = models.CharField(max_length=50, null=True)
    
    def __str__(self):
        return self.apartment_title

class ApartmentImage(models.Model):
    apartment = models.ForeignKey(Apartment, on_delete=models.CASCADE)
    image = models.ImageField(upload_to='images/', null=True, blank=True)

还有 serializers.py 类:

    class ApartmentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Apartment
        fields = (
            'id',
            'url',
            'apartment_title', 
            'apartment_description', 
            'apartment_location', 
            'apartment_people_quantity', 
            'apartment_price',
            'apartment_type',
            )

class ApartmentImageSerializer(serializers.ModelSerializer):
    class Meta:
        model = ApartmentImage
        fields = ('id', 'url', 'apartment', 'image',)

在views.py中:

    apartment_id = django_filters.CharFilter(name="apartment__id",
                                            queryset=Apartment.objects.all())

    class Meta:
        model = ApartmentImage
        fields = ('apartment_id',)

class ApartmentImageView(viewsets.ModelViewSet):
    queryset = ApartmentImage.objects.all()
    serializer_class = ApartmentImageSerializer
    filter_backends = (DjangoFilterBackend,)
    filter_class = ApartmentImageFilter

【问题讨论】:

  • 添加完整的错误回溯
  • 添加完整的跟踪确实很有用,但是检查 Django 对过滤器的引用,可能django_filters.CharFilter(name="apartment__id", queryset=Apartment.objects.all()) 应该是django_filters.CharFilter(filed_name="apartment__id", queryset=Apartment.objects.all())。虽然,我不确定。

标签: python django django-rest-framework django-filter django-filters


【解决方案1】:

django-filters 中没有名称作为属性。也许你要找的是field_name,你也不需要queryset=Apartment.objects.all()。如果您正在寻找 field_name 的字段,那么您的 CharFielter 应该看起来像这样 apartment_id = django_filters.CharFilter(field_name="apartment__id", lookup_expr='iexact'),如果您没有覆盖 id 生成,它可能应该是 NumberFilter(),如果我没记错的话。

【讨论】:

  • 非常感谢。欣赏它。是的,我没有覆盖 id 生成,所以它是 NumberFilter()。这件事在你们俩都告诉过
猜你喜欢
  • 1970-01-01
  • 2020-01-14
  • 2020-08-02
  • 1970-01-01
  • 2020-11-03
  • 2016-02-23
  • 2018-08-02
  • 2019-05-31
  • 1970-01-01
相关资源
最近更新 更多