Django как сделать запрос на отношения "многие ко многим
Это моя модель
class MenuItem(models.Model):
name = models.CharField(max_length=500, null=False)
description = models.CharField(max_length=500, null=True)
image_url = models.CharField(max_length=1000, null=True)
menu_category = models.ForeignKey(MenuCategory, on_delete=models.CASCADE)
def __str__(self):
return f'{self.name}'
class Venue(models.Model):
name = models.CharField(max_length=500, null=False)
def __str__(self):
return f'{self.name}'
class VenueMenu(models.Model):
venue = models.ForeignKey(Venue, null=False, on_delete=models.CASCADE)
menu_item = models.ManyToManyField(MenuItem, null=False)
Это мой сериализатор
class MenuItemSerializer(serializers.ModelSerializer):
menu_category = MenuCategorySerializer()
class Meta:
model = MenuItem
fields = '__all__'
class VenueMenuSerializer(serializers.ModelSerializer):
menu_item = MenuItemSerializer(many=True)
class Meta:
model = VenueMenu
fields = '__all__'
И это мое мнение
@api_view(['GET'])
def venue_menu_response_detail(request):
if request.GET.get('venue'):
venue_menu_list = VenueMenu.objects.filter(venue__name=request.GET.get('venue'))
serializer = VenueMenuSerializer(venue_menu_list, many=True)
return Response(serializer.data)
вот мой URL http://127.0.0.1:8000/venue_menu_response_list?venue=venu_name
Я хочу получить все заведения и пункты меню, связанные с этим заведением, этот запрос возвращает пустой результат, поэтому я думаю, что проблема в моем запросе.
Попробуйте эти варианты и посмотрите. Убедитесь, что вы передаете место проведения в запросе get
from django.http import Http404
@api_view(['GET'])
def venue_menu_response_detail(request):
try:
venue_name = request.query_params['venue']
except:
raise Http404
venue_menu_list = VenueMenu.objects.all().filter(venue__name=venue_name)
serializer = VenueMenuSerializer(venue_menu_list, many=True)
return Response(serializer.data)
ИЛИ
@api_view(['GET'])
def venue_menu_response_detail(request,venue=None):
if venue==None:
raise Http404
venue_menu_list = VenueMenu.objects.all().filter(venue__name=venue_name)
serializer = VenueMenuSerializer(venue_menu_list, many=True)
return Response(serializer.data)
Также, пожалуйста, покажите мне ваши урлы
добавить сериализатор места:
class VenueSerializer(serializers.ModelSerializer):
class Meta:
model = Venue
fields = ('id', 'name')
Затем измените VenueMenuSerializer следующим образом:
class VenueMenuSerializer(serializers.ModelSerializer):
menu_item = MenuItemSerializer(many=True)
venue = VenueSerializer(many=False) # if have multiple record set it True
class Meta:
model = VenueMenu
fields = '__all__'