为多对多或外键创建模型

时间:2019-12-01 15:29:58

标签: python django rest model frameworks

我有两个模型,ItemContent。所以我想要的是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。因为我想返回与内容相关的ID。但是我在内容列表中没有得到item_id。我该如何实现?我在做错什么吗?

2 个答案:

答案 0 :(得分:1)

您必须像这样设置模型:

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',)

答案 1 :(得分:0)

# 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)