为什么当我得到included_lessons中的全部products而不是对象时,我只收到它们的ID,而我想收到完整的对象:ID、名称等.

What I receive:

[
    {
        "id": 5,
        "author": "author",
        "name": "math product",
        "start_time": "2024-03-01T08:25:17Z",
        "min_users_in_group": 5,
        "max_users_in_group": 1,
        "included_lessons": [
            7,
            8,
            9
        ]
    }
]

What I want to receive:

[
    {
        "id": 5,
        "author": "author",
        "name": "math product",
        "start_time": "2024-03-01T08:25:17Z",
        "min_users_in_group": 5,
        "max_users_in_group": 1,
        "included_lessons": [
            {
                "id": 1,
                "name": "some name",
                "something else": "something else"
            },
            {
                "id": 2,
                "name": "some name 2",
                "something else": "something else 2"
            }
        ]
    }
]

Model:

class Product(models.Model):
    author = models.CharField(max_length=64)
    name = models.CharField(max_length=64)
    start_time = models.DateTimeField()
    min_users_in_group = models.IntegerField()
    max_users_in_group = models.IntegerField()
    included_lessons = models.ManyToManyField(Lesson, related_name='lessons')

    class Meta:
        db_table = 'product'

    def __str__(self):
        return self.name

Serializer:

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = '__all__'

View model:

class ProductApiView(viewsets.ReadOnlyModelViewSet):
    queryset = Product.objects.all()
    serializer_class = ProductSerializer

我试着把queryset换成API View model,但没用

推荐答案

指定子序列化程序:

class LessonSerializer(serializers.ModelSerializer):
    class Meta:
        model = Lesson
        fields = '__all__'


class ProductSerializer(serializers.ModelSerializer):
    lessons = LessonSerializer(many=True)

    class Meta:
        model = Product
        fields = '__all__'

您可以通过在一个查询中获取所有相关的Lesson来进一步提高性能:

class ProductApiView(viewsets.ReadOnlyModelViewSet):
    queryset = Product.objects.prefetch_related('lessons')
    serializer_class = ProductSerializer

Django相关问答推荐

使用FormWizard将信息从视图传递到表单

DRF中是否有有效的更新有序数据的算法?

新的 Django 开发人员无法在网站上显示Hello World,而不是默认安装成功页面

SQLite上可以正常使用Many2Many链接注释,但MariaDB上无法正常使用(生产环境)

在 django HTML 邮箱模板中使用字体

相同的字符串不同的翻译

初始填充 Django 表单

Django中的左外反向select_related?

使用 XMLHttpRequest 提示下载文件

Django UrlResolver,在运行时添加 url 进行测试

Django:如何编写查询以使用多列进行排序,通过模板显示

如何在 Django 中测试自定义模板标签?

如何在保存之前更改 Django 表单字段值?

将 Django Rest Framework 与序列化程序一起使用时出现 AttributeError

如何找到两个 Django 查询集的交集?

模型表格Save保存,Get获取保存的对象

ProgrammingError: 安装 Psycopg2 后,关系django_session不存在错误

django 我们可以在预取相关模型上 Select 一个字段吗?

Django中GROUP BY中注释的聚合

Django 在 css 文件中使用背景图像的方法