Django rest framework не возвращает все поля

Я пытаюсь сделать модель, которая хранит любимые шоу для пользователей, и я использовал наборы представлений. У меня есть набор представлений users и shows, которые работают так, как я ожидаю, и у меня есть другая модель, которая просто хранит отношения между пользователями и шоу. Однако когда я добавляю эту модель в качестве набора представлений, я получаю id и пользователя, но не получаю шоу.

Вот результаты для фаворитов:

[
   {
      "id":2,
      "user":{
         "username":"poduck",
         "first_name":"",
         "last_name":"",
         "email":"poduck@gmail.com",
         "image":null,
         "url":"http://0.0.0.0:8000/api/users/poduck/?format=json"
      }
   }
]

Здесь даже нет поля show. Это не значит, что данных там нет. Я смог использовать запросы к этим данным без проблем. У меня есть доступ и к шоу, и к пользователю из избранного.

Я подумал, что, возможно, тот факт, что show указывает на пользователя, а favorite указывает на пользователя, что там может быть какой-то круговой конфликт, но помимо исключения поля user из сериализатора Show, я не знаю, что делать, чтобы исправить это, и да, я попробовал исключить его из сериализатора Show.

shows.models:

from django.db import models
from django.utils.translation import gettext_lazy as _
from localflavor.us.models import USStateField, USZipCodeField
from users.models import User
from phonenumber_field.modelfields import PhoneNumberField


# Create your models here.
class Show(models.Model):
    # Information
    title = models.CharField(_("Title"), blank=False, max_length=255)
    location = models.CharField(_("Location Name"), blank=False, max_length=255)
    image = models.ImageField(upload_to='show_images', blank=True)
    description = models.TextField(_("Description"), blank=False)
    start_date = models.DateField(_("Start Date"), blank=False)
    end_date = models.DateField(_("End Date"), blank=False)
    registration_start = models.TimeField(_("Registration Start Time"), blank=False)
    registration_end = models.TimeField(_("Registration End Time"), blank=False)
    start_time = models.TimeField(_("Spectator Start Time"), blank=False)
    end_time = models.TimeField(_("Spectator End Time"))
    address = models.CharField(_("Show Address"), blank=False, max_length=255)
    city = models.CharField(_("City"), blank=False, max_length=255)
    state = USStateField(_("State"), blank=False, max_length=2)
    zip = USZipCodeField(_("Zip Code"), blank=False)
    contact_name = models.CharField(_("Contact name"), blank=True, max_length=255)
    contact_email = models.EmailField(_("Contact Email"), blank=True, max_length=255)
    contact_phone = PhoneNumberField(_("Contact Phone"), blank=True)
    website = models.URLField(_('Official website'), blank=True)
    entry_fee = models.DecimalField(_('Entry fee'), default=0.00, blank=False, decimal_places=2, max_digits=10)
    spectator_entry_fee = models.DecimalField(_('Spectator entry fee'), default=0.00, blank=False, decimal_places=2, max_digits=10)
    trophies = models.BooleanField(_("Trophies or Ribbons Awarded"), default=False)
    dash_plaques = models.BooleanField(_("Dash Plaques Given"), default=False)
    dash_plaque_quantity = models.IntegerField(_("Quantity of dash plaques to be given"), null=True, blank=True)
    door_prizes = models.BooleanField(_("Door Prizes"), default=False)
    judging = models.BooleanField(_("Professional Judging"), default=False)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)

    def __str__(self):
        return f"{self.title}"


class Favorite(models.Model):
    show = models.ForeignKey(Show, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return f"{self.show.title}"

shows.api.serializers:

from rest_framework import serializers
from shows.models import Show, Favorite
from users.api.serializers import UserSerializer


class ShowSerializer(serializers.ModelSerializer):
    user = UserSerializer()

    class Meta:
        model = Show
        fields = '__all__'


class FavoriteSerializer(serializers.ModelSerializer):
    show = ShowSerializer(many=True, read_only=True)
    user = UserSerializer()

    class Meta:
        model = Favorite
        fields = '__all__'

shows.api.viewsets:

from car_show_helper.shows.models import Show
from .serializers import ShowSerializer, FavoriteSerializer
from rest_framework import viewsets


class ShowViewSet(viewsets.ModelViewSet):
    queryset = Show.objects.all()
    serializer_class = ShowSerializer


class FavoriteViewSet(viewsets.ModelViewSet):
    queryset = Show.objects.all()
    serializer_class = FavoriteSerializer

И, наконец, api_router:

from django.conf import settings
from rest_framework.routers import DefaultRouter, SimpleRouter

from car_show_helper.users.api.views import UserViewSet
from car_show_helper.shows.api.viewsets import ShowViewSet, FavoriteViewSet


if settings.DEBUG:
    router = DefaultRouter()
else:
    router = SimpleRouter()

router.register("users", UserViewSet)
router.register("shows", ShowViewSet, basename="shows")
router.register("favorites", FavoriteViewSet, basename="favorites")


app_name = "api"
urlpatterns = router.urls

Любая помощь будет принята с благодарностью.

Сначала измените queryset внутри FavoriteViewSet

class FavoriteViewSet(viewsets.ModelViewSet):
    queryset = Show.objects.all()
    serializer_class = FavoriteSerializer

to

queryset = Favorite.objects.all()

Во-вторых, удалите many=True из:

show = ShowSerializer(read_only=True, many=True)
Вернуться на верх