Создание моделей для многих ко многим или внешнего ключа - PullRequest
0 голосов
/ 01 декабря 2019

У меня есть две модели, Item и Content. Так что я хочу, чтобы Item имел много Content.

class Item(models.Model):
    title = CharField(max_length=255)
    content = models.ManyToManyField('Content', blank=True)

class Content(models.Model):
    title = CharField(max_length=255)


class ItemSerializer(serializers.ModelSerializer):
    content = ContentSerializer(many=True)
    class Meta:
        model = Item
        fields = ('id', 'title', 'content',)

class ContentSerializer(serializers.ModelSerializer):
    item_id = serializer.RelatedField(read_only=True)
    class Meta:
        model = Content
        fields = ('id', 'title', 'item_id',)

. В сериализаторе контента обратите внимание, что я дал дополнительное поле item_id. Потому что я хочу вернуть идентификатор товара, с которым связано содержимое. Но я не получаю item_id в списке контента. Как мне этого добиться? Я что-то не так делаю?

Ответы [ 2 ]

1 голос
/ 04 декабря 2019

Вы должны настроить свои модели так:

class Item(models.Model):
  title = CharField(max_length=255)


class Content(models.Model):
  item = models.ForeignKey(Item,on_delete=models.CASCADE)
  title = CharField(max_length=255)

Затем в вашем сериализаторе вы забыли одну вещь, источник :

class ContentSerializer(serializers.ModelSerializer):
  item_id = serializer.RelatedField(source='item', read_only=True)

  class Meta:
    model = Content
    fields = ('id', 'title', 'item_id',)
0 голосов
/ 01 декабря 2019
# You need to use ForeignKey in your Item model

class Item(models.Model):
    title = CharField(max_length=255)
    content = models.ForeignKey(Content, on_delete=models.CASCADE, related_name='item_content')

class Content(models.Model):
    title = CharField(max_length=255)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...