Создание вложенных сериализаторов в Django
Не получается добавить поле с данными из другой модели.
Руководствовался: этим и этим
Модели:
class Cards(models.Model):
name = models.CharField(max_length=100, verbose_name='Имя карты')
number = models.IntegerField(verbose_name='Номер карты')
id_set = models.ForeignKey('Sets', on_delete=models.CASCADE, verbose_name='ID сета')
card_img = models.CharField(max_length=50)
class User_cards(models.Model):
id_user = models.ForeignKey(User, on_delete=models.CASCADE,)
id_cards = models.IntegerField()
count = models.IntegerField(default=0)
foil = models.IntegerField(blank=True)
language = models.IntegerField(blank=True, default='01000000000')
Вьюха:
class CardsView(generics.ListAPIView):
serializer_class = CardSerializers
filter_backends = (DjangoFilterBackend,)
filterset_class = CardsFilter
def get_queryset(self):
cardnames = Cards.objects.all()
return cardnames
Серилизаторы:
class UserCardSerializers(serializers.ModelSerializer):
class Meta:
model = User_cards
fields = ('__all__',)
class CardSerializers(serializers.ModelSerializer):
user_set = UserCardSerializers(many=True, read_only=True)
class Meta:
model = Cards
fields = ('name', 'user_set')
На выходе - просто поля модели Cards
На выходе куда? Все выглядит нормально, только __all__
должен быть простой строкой, а не кортежем, и непонятно куда ведет внешний ключ id_set
. В связи "один ко многим" внешний ключ может быть только с одной стороны (у одной модели).