【问题标题】:Serializing an array of data on the basis of foreign key django rest framework基于外键django rest框架序列化数组数据
【发布时间】:2017-10-17 20:11:10
【问题描述】:

我正在使用 django rest 框架将 property_id 作为外键发布到收藏夹表中,并且基于外键我想从属性表中获取所有字段。

class Favorites(models.Model):
    """Store favorite property"""

    user_id = models.ForeignKey(User, on_delete=models.CASCADE)
    property_id = models.ForeignKey(Property, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True, blank=True)

序列化器:

class FavoriteSerializer(serializers.ModelSerializer):
    """Favorite Properties serializer"""

    class Meta:
        model = Favorites
        fields = ('user_id','property_id', )

视图集:

class FavoriteViewSet(viewsets.ModelViewSet):

    http_method_names = ['get','post' ]
    serializer_class = FavoriteSerializer
    queryset = Favorites.objects.all()

输出:

这是我的第一个输出。然后我同步我的属性 Serializer 并得到这个:

这是我需要的输出,但在发布期间会产生问题。在发布期间,我只需要 user_id 和 property_id,但它使我的发布形式如下:

有什么建议可以实现我的结果吗?

【问题讨论】:

  • 你从html form尝试过raw data吗?
  • 是的,我尝试插入数据并收到错误““property_id”列中的空值违反非空约束”。

标签: python django django-models django-rest-framework


【解决方案1】:

序列化器.py

class FavoriteCreateSerializer(serializers.ModelSerializer):
    """Favorite Properties serializer"""

    class Meta:
        model = Favorites
        fields = ('user_id','property_id', )

class FavoriteListSerializer(serializers.ModelSerializer):
    property_id = PropertySerializer(read_only=True)

    class Meta:
        model = Favorites
        fields = ('user_id','property_id', )

views.py

class FavoriteViewSet(viewsets.ModelViewSet):

    http_method_names = ['get','post' ]
    serializer_class = FavoriteSerializer
    queryset = Favorites.objects.all()

    def get_serializer_class(self):
            if self.action == 'create':
                return FavoriteCreateSerializer
            else:
                return self.serializer_class

【讨论】:

  • 感谢@Ykh,这是我采用的第二种方法。
猜你喜欢
  • 1970-01-01
  • 2022-01-13
  • 2017-01-07
  • 1970-01-01
  • 2021-04-08
  • 1970-01-01
  • 2016-03-23
  • 2021-06-22
  • 2014-07-30
相关资源
最近更新 更多