DRF中的过滤问题

问题描述

我遇到的问题是: TypeError: init ()获得了意外的关键字参数名称” “ 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','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-filters中的属性。也许您正在寻找field_name,而您也不需要queryset=Apartment.objects.all()。如果您要查找的是field_name字段,那么您的CharFielter应该看起来像这样apartment_id = django_filters.CharFilter(field_name="apartment__id",lookup_expr='iexact'),如果您没有覆盖id生成,那么如果我是NumberFilter()没错。