Поиск REST API с параметрами URL, тестирование работает с некоторыми значениями, но не с другими (все значения являются допустимыми)

Я создаю веб-приложение для поиска в базе данных ваз с помощью Django/react. Я создал представление API, которое принимает параметры URL для поиска записи о вазе. При тестировании вызова API некоторые значения работают как ожидалось, но другие - нет. Вот мой views.py:

class FilterVases(generics.ListAPIView):
    serializer_class = VaseSerializer 
    def get_queryset(self):
        queryset = Vase.objects.all()
        query_provenance = self.request.query_params.get('provenance_name')
        if query_provenance is not None:
            try:
                provenance = Provenance.objects.get(provenanceName=query_provenance)
                queryset = queryset.filter(provenance=provenance)
            except:
                pass
        inscription = self.request.query_params.get('inscription')
        if inscription is not None:
            queryset = queryset.filter(inscription=inscription)
        query_shape = self.request.query_params.get('shape_name')
        if query_shape is not None:
            try:
                shape = Shape.objects.get(shapeName=query_shape)
                queryset = queryset.filter(shape=shape)
            except:
                pass
        query_collection = self.request.query_params.get('collection_name')
        if query_collection is not None:
            try:
                collection = Collection.objects.get(collectionName=query_collection)
                queryset = queryset.filter(collection=collection)
            except:
                pass
        query_artist = self.request.query_params.get('artist_name')
        if query_artist is not None:
            try:
                artist = Artist.objects.get(artistName=query_artist)
                queryset = queryset.filter(artist=artist)
            except:
                pass
        fabric = self.request.query_params.get('fabric')
        if fabric is not None:
            queryset = queryset.filter(fabric=fabric)
        vaseID = self.request.query_params.get('vaseID')
        if vaseID is not None:
            queryset = queryset.filter(vaseID=vaseID)
        return queryset 

и мой models.py:

#define shape class
class Shape(models.Model) :
    shapeID = models.CharField(max_length=10)
    shapeName = models.CharField(max_length=100)

#define artist class
class Artist(models.Model) :
    artistID = models.CharField(max_length=10)
    artistName = models.CharField(max_length=100)

#define provenance class
class Provenance(models.Model) :
    ProvenanceID = models.CharField(max_length=10)
    provenanceName = models.CharField(max_length=100)

#define collection class
class Collection(models.Model) :
    collectionID = models.CharField(max_length=10)
    collectionName = models.CharField(max_length=100)

#define vase class
class Vase(models.Model):
    vaseID = models.CharField(max_length=10) 
    vaseRef = models.CharField(max_length=255,blank=True,null=True)
    inscription = models.CharField(max_length=255,blank=True,null=True)
    fabric = models.CharField(max_length=100, blank=True,null=True)
    subject = models.CharField(max_length=255,blank=True,null=True)
    technique = models.CharField(max_length=100,blank=True,null=True)
    height = models.FloatField(max_length=100,blank=True,null=True)
    diameter = models.FloatField(max_length=100,blank=True,null=True) 
    shape = models.ForeignKey(Shape, on_delete=models.CASCADE)
    artist = models.ForeignKey(Artist, on_delete=models.CASCADE)
    provenance = models.ForeignKey(Provenance, on_delete=models.CASCADE)
    collection = models.ForeignKey(Collection, on_delete=models.CASCADE)
    def artist_name(self):
        return self.artist.artistName
    def collection_name(self):
        return self.collection.collectionName
    def provenance_name(self):
        return self.provenance.provenanceName
    def shape_name(self):
 

   return self.shape.shapeName

Несколько примеров тестирования параметров: если я передаю /?collection_name=имя коллекции, я получаю ожидаемый вывод записей, содержащих имя коллекции "имя коллекции". Если я передам /?collection_name=Naples, я получу возврат всех записей в базе данных - unexpected. Если я передам /?artist_name=python, я получу ожидаемую запись, содержащую исполнителя "python". Если я передам /?artist_name=имя исполнителя, я получу ожидаемые записи, содержащие "имя исполнителя". Если я передам /?artist_name=первый художник, я получу все записи в базе данных, возвращенные как неожиданные. Все вышеперечисленные параметры действительны и имеют записи в базе данных, но возвращаются только некоторые. То же самое происходит с параметрами shape_name и provenance_name. Странный и неожиданный результат. Есть ли у кого-нибудь объяснение, что происходит?

Вернуться на верх