社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

Django序列化程序显示相关模型的布尔字段

Stevy Matt • 4 年前 • 675 次点击  

我有两个模型: App &安培; AppVersion

我正在尝试序列化 以及来自 应用程序 模型。无法在序列化程序中显示相关字段。

目标

我的目标是让API响应包含如下相关字段:

[
    {
        "app_version_uuid": "61ee8efa-f79e-4fcd-a6ea-4a33544442e1",
        "app_version_name": "Test app version",
        "version_code": 2,
        "version_name": "0.2",
        "auto_start": True   # related field
    }
]

# models.py

class App(models.Model):
    app_uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, db_index=True)
    app_name = models.CharField(max_length=100)
    package_id = models.CharField(max_length=100, unique=True, null=True, blank=True, editable=False)
    auto_start = models.BooleanField(default=False)  


class AppVersion(models.Model):
    app_version_uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, db_index=True)
    app_uuid = models.ForeignKey(App, on_delete=models.CASCADE, related_name='app_versions')
    app_version_name = models.CharField(max_length=100)
    version_name = models.CharField(blank=True, null=True, max_length=100, editable=False)
    version_code = models.IntegerField(blank=True, null=True, editable=False)

串行器

# serializers.py

class AppVersionSerializer(serializers.ModelSerializer):
    auto_start = serializers.SlugRelatedField(read_only=True, slug_field='auto_start')

    class Meta:
        model = AppVersion
        fields = ('app_version_uuid', 'app_version_name', 'version_code', 'version_name', 'auto_start')

我试过的

我试着用 SlugRelatedField() serializers.py SerializerMethodField() 这样地:

# serializers.py

class AppSerializer(serializers.ModelSerializer):
    class Meta:
        model = App
        fields = ('auto_start')

class AppVersionSerializer(serializers.ModelSerializer):
    auto_start = serializers.SerializerMethodField(read_only=True)

    def get_auto_start(self, model):
        return AppSerializer(model).data

    class Meta:
        model = AppVersion
        fields = ('app_version_uuid', 'app_version_name', 'version_code', 'version_name', 'auto_start')

这个 不显示 auto_start 在回应中。

使用 自动启动 如图所示:

"auto_start": {}

自动启动 在我的回答中?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/56827
 
675 次点击  
文章 [ 1 ]  |  最新文章 4 年前