【问题标题】:How to replace foreign key by its associated value in django queryset如何用 django 查询集中的关联值替换外键
【发布时间】:2020-09-19 19:24:19
【问题描述】:

我是 django 的新手,我需要你的帮助!

我编写了一个 api/route 视图,用于查询数据库并将 JSON 返回到我的 javascript 中的 fetch 函数。

有没有办法查询数据库并取回一个用其关联值替换外键的查询集?

虽然我可以使用ModelName.objects.select_related( 'field '),但我不明白它是如何工作的。 如果您对实现目标的更好方法有解决方案或建议,请提前致谢!

伪代码中的上下文:

// HTML //

  • 按钮点击函数get_list_of_data

// JS //

函数get_list_of_data:

  • 获取路由 django 的 URL

  • 将响应转换为 JSON

  • 遍历 JSON 以填充 HTLM div

// Django //

  • 使用 ModelName.objects.filter(name = name) 获取 Queryset 中的数据列表

  • 使用 serializers.serialize(json, ...") 从 Queryset 获取 JSON

  • 返回 JsonResponse (json_query)

【问题讨论】:

  • 是的,你可以在 js 数据中传递你的对象 id,然后在你的后端(django)中获取它,然后制作你想要的任何东西!

标签: django django-models django-rest-framework fetch django-queryset


【解决方案1】:

如果我很好地理解了这个问题,当您序列化定义了 ForeignKey 字段的模型时,您只会在 JSON 响应中获得 id 值,但您希望返回整个对象(不仅仅是数字) .
做到这一点的方法是专门为该ForeignKey 模型编写序列化程序,然后在序列化程序或您尝试获取的模型中使用它。
您还没有提供任何代码,但这里有一些可能对您有所帮助的示例:

class SecondModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = SecondModel
        fields = '__all__'


class FirstModelSerializer(serializers.ModelSerializer):
    foreign_key_field = SecondModelSerializer()

    class Meta:
        model = FirstModel
        fields = ('id', 'foreign_key_field', 'field1', 'field2')

在您的 FirstModelSerializer 中,您特别告诉 Django 使用 SecondModelSerializer 作为您的 ForeignKey 字段(我将其命名为 foreign_key_field)。这样 Django 将知道如何序列化该字段,而不是只返回 id 值。

【讨论】:

    猜你喜欢
    • 2014-10-14
    • 2015-03-09
    • 1970-01-01
    • 2016-04-07
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 2019-06-12
    相关资源
    最近更新 更多