【问题标题】:Creating models for many-to-many or foreign key为多对多或外键创建模型
【发布时间】:2020-03-26 08:40:36
【问题描述】:

我有两个模型,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。我如何实现这一目标?我是不是做错了什么?

【问题讨论】:

    标签: python django rest model frameworks


    【解决方案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',)
    

    【讨论】:

      【解决方案2】:
      # 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)
      

      【讨论】:

        猜你喜欢
        • 2012-07-10
        • 2012-07-22
        • 2012-08-10
        • 2016-03-13
        • 2015-01-29
        • 2021-09-26
        • 2011-06-15
        • 1970-01-01
        相关资源
        最近更新 更多