Я совершенно нового в Django и Django Api Rest FrameWorkДжанго апи остальное фильтр manytomany
Я пытаюсь разработать Апи с двумя моделями relationated с ManyToMany соотношением
models.pyclass Category(models.Model):
name = models.CharField(max_length=100)
class Apartment(models.Model):
id_2 = models.IntegerField(default= None)
neighborhood = models.CharField(max_length=100)
name = models.CharField(max_length=120)
district = models.CharField(max_length=120)
created = models.DateTimeField()
cats = models.ManyToManyField(Category)
address = models.CharField(max_length=200)
postal_code = models.IntegerField()
latitude = models.FloatField()
longitude = models.FloatField()
serializers.py
class CategorySerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Category
fields = ('id', 'name')
class AptSerializer(serializers.HyperlinkedModelSerializer):
cats = CategorySerializer(many=True, read_only=True)
class Meta:
model = Apartment
fields = ('id_2', 'neighborhood', 'name','district','created','cats','address','postal_code','latitude','longitude')
view.py
class AptViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows groups to be viewed or edited.
"""
queryset = Apartment.objects.all()
serializer_class = AptSerializer
filter_backends = (filters.DjangoFilterBackend,)
filter_fields = ('id_2', 'neighborhood', 'name', 'district','created','cats','address','postal_code','latitude','longitude')
routers.py
router.register(r'apartments', views.AptViewSet)
Как вы можете видеть, он реализует DjangoFilterBackend так что теперь я могу фильтровать с URLs типа
http://localhost:8000/apartments/?district=Eixample
и я получаю эту
{
"id_2": 1044121532,
"neighborhood": "la Nova Esquerra de l'Eixample",
"name": "Hotel Exe AB Viladomat",
"district": "Eixample",
"created": "2001-02-13T00:00:00Z",
"cats": [
{
"id": 1073,
"name": "Allotjament"
},
{
"id": 1075,
"name": "Hotels"
},
{
"id": 1076,
"name": "3 estrelles"
}
],
"address": "Viladomat 197",
"postal_code": 8015,
"latitude": 41.383665702777776,
"longitude": 2.151834694444444
},
Я хотел бы t o сделать запрос на получение запроса, как
http://localhost:8000/apartments/?cats_name=Hotels
Но это не сработает, любая идея, с которой будет дорога с этого момента? Написать пользовательский фильтр? написать еще один объект ViewSet для категории?
Спасибо
Спасибо @seenu s это сработало для меня Единственная проблема - это параметр в getqueryset, который должен быть (я) 'class AptViewSet (класс) viewets.ModelViewSet): "" " Конечная точка API, которая позволяет просматривать или редактировать группы. " "" queryset = Apartment.objects.все() serializer_class = AptSerializer Защиту get_queryset (Я): QuerySet = супер (AptViewSet, самость) .get_queryset() cats_name = self.request.query_params.get ('cat_name', None) если cats_name не None: queryset = queryset.filter (cats__name = cats_name) return queryset' – PereCullera
Можете ли вы принять ответ, который он поможет другим? –