Skip to main content
 首页 » 编程设计

python之基于外键django rest框架序列化数组数据

2024年10月01日24mayingbao

我正在使用 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', ) 

View 集:

class FavoriteViewSet(viewsets.ModelViewSet): 
 
    http_method_names = ['get','post' ] 
    serializer_class = FavoriteSerializer 
    queryset = Favorites.objects.all() 

输出:

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

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

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

请您参考如下方法:

序列化器.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', ) 

View .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