Используя Django REST Framework, я создал URL, который отображается на страницу с файлом JSON, содержащим все объекты в моей базе данных.
Я хочу сделать то же самое, но вместо того, чтобы показывать только все объекты, которые мне нужныобъекты, которые соответствуют определенной категории (категория является атрибутом в моей модели).
У меня есть URL, которые показывают файлы JSON с одним объектом в нем (с использованием атрибута pk), но когда я пытаюсь сделатьТо же самое с категорией вместо pk. Я получаю ошибку MultipleObjectsReturned.
Я просто работаю со средой REST, я пытался использовать разные представления и представления на основе классов, ничего не решая.
Любая подсказка илипредложение действительно ценится спасибо.
# models.py
class Hardware(models.Model):
name = models.CharField(max_length=25)
category = models.CharField(choices=CATEGORY_CHOICES, max_length=2)
def get_api_url(self):
return api_reverse("category-api-postings:post-rud", kwargs={'category': self.category})
#views.py
class HardwareListView(generics.ListCreateAPIView):
pass
lookup_field = 'pk'
serializer_class = HardwareSerializer
def get_queryset(self):
query = self.request.GET.get("q")
qs = Hardware.objects.all()
if query is not None:
qs = qs.filter(Q(title__icontains=query) | Q(content__icontains=query)).distinct()
return qs
class HardwareRudView(generics.RetrieveUpdateDestroyAPIView):
pass
lookup_field = 'category'
serializer_class = HardwareSerializer
def get_queryset(self):
return Hardware.objects.all()
#urls.py
app_name = 'category-api-postings'
urlpatterns = [
path('', exercise_view),
path('list-api/', HardwareListView.as_view(), name='all'),
path('list-api/<str:category>/', HardwareRudView.as_view(), name='post-rud')
#serializer.py
class HardwareSerializer(serializers.ModelSerializer):
url = serializers.SerializerMethodField(read_only=True)
class Meta:
model = Hardware
fields = [
'url',
'pk',
'name',
'category'
]
read_only_fields = ['user']
def get_url(self, obj):
return obj.get_api_url()