在 django-rest-framework 中创建一个带有关系的rest api

2024-03-17

在 django-rest-framework 中创建一个rest api

我有2张桌子

拳头表:用户

id   | PK
Name | varchar(255)

第二个表:地址

id      | PK
address | varchar(255)
city_id | int
user_id | FK

现在,当我对 User 进行查询时,我还想要 Json 格式的用户地址

像这样

[
  {
    "id": 98,
    "name": "[email protected] /cdn-cgi/l/email-protection",

    "address": [
      {
        "id": 51,
        "city_id": 5,
        "addrss": "New York",
      },
      {
        "id": 61,
        "city_id": 5,
        "addrss": "California",
      },
    ]
  }
]

模型.py-

class User(models.Model):
    catcher_fname = models.CharField(max_length = 128, blank = True)
    catcher_lname = models.CharField(max_length = 128, blank = True)
    api_key = models.CharField(max_length = 100, blank = False)



class Address (models.Model):
    address = models.CharField(max_length = 150)
    city = models.CharField(max_length = 255)
    user = models.ForeignKey(User,on_delete=models.CASCADE,related_name='addresses')

注意 - id 字段是自动递增的并且内置在 django 中,您不需要直接指定它。以下演示了如何链接用户 obj 和地址 obj。

>> from .models import User,Address
>> user_obj = User.objects.get(pk=pk)
>> address_obj = Address.objects.get(pk=address_pk)
>> user_obj.address = address_obj
>> user_obj.save()

稍后您可以从用户对象访问该地址,如下所示:

>> from .models import User
>> user_obj = User.objects.get(pk=pk)
>> user_obj.addresses.all() (will give the data)

现在安装 django-rest 框架

views.py -

from rest_framework.generics import RetrieveAPIView
from .serializers import UserDetailSerializer


class UserAPIView(RetrieveAPIView):
      serializer_class = UserDetailSerializer
      lookup_field = 'id'
      queryset = User.objects.all()

序列化器.py -

from .models import User,Address
from rest_framework import serializers


class AddressSerializer(serializers.ModelSerializer):
    class Meta:
        model = Address
        fields = ('id', 'city_id', 'address')

class UserDetailSerializer(serializers.ModelSerializer):
    address = AddressSerializer(many=True)
    class Meta:
           model = User
           fields = (
              'id',
              'name',
              'address'
           )

urls.py

from django.conf.urls import url

from reports.views import UserAPIView

urlpatterns = [
    url(r'^users/(?P<id>[0-9]+)/$',UserAPIView.as_view(), name= 'users'),
]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 django-rest-framework 中创建一个带有关系的rest api 的相关文章

随机推荐

  • read.csv() - 三列中的两列[重复]

    这个问题在这里已经有答案了 可能的重复 只读取 R 中有限数量的列 https stackoverflow com questions 5788117 only read limited number of columns in r 我有一
  • 使用 A* JPS 进行 3D 搜索

    我该如何概括跳转点搜索 http harablog wordpress com 2011 09 07 jump point search 3D 搜索量 到目前为止 我已经定义了涉及三个运动的 3D 立方体的修剪规则 直线 0 0 1 一阶对
  • 为什么在泛型类(Java)的构造函数中提供类型参数是错误的?

    我刚刚从一本教科书中学习 Java 中的泛型 其中讨论了一个类GenericStack
  • 如何使用 ICU4C 规范化字符串?

    我发现 ICU 文档有些挑战性 我的问题是 如何使用 ICU4C 规范化字符串 我正在查看 unorm2 normalize 但是如果缓冲区不够大怎么办 我以前怎么知道这一点 当然 我想标准化整个字符串 谢谢 gt 附 以下是该函数的 AP
  • 如何以编程方式更改 ActionBar 菜单项文本颜色?

    我有一个包含多个项目的操作栏 我想在单击该项目时更改文本的颜色 有没有办法以编程方式执行此操作 请提供示例或任何资源 Thanks public void catalogClick MenuItem item highlight menui
  • Scala 可变选项?

    我想要这样的东西 private val cachedResponse mutable Option empty A def get A cachedResponse getOrElseUpdate db findModel def upd
  • 基于非类型模板参数的重载

    我们熟悉基于函数参数的重载 但是为什么我们不能基于非类型模板参数进行重载呢 通过这种重载 您不必仅仅为了重载目的而添加额外的函数参数 这可能会对运行时性能产生负面影响 唉 下面的代码无法编译 template
  • jQuery 模拟点击选项卡并执行代码

    下面的代码 当我单击选项卡时 我会发布帖子并在选项卡中显示结果 在某些情况下 我想强制选择选项卡 但不仅选择该选项卡 而且选择该选项卡 执行单击它时执行的代码 在我的示例中 我喜欢选择第二个选项卡 jLikeToSet 1 并执行代码 po
  • 如何将一个android studio项目合并到另一个android studio项目中

    我有两个独立的 android 应用程序项目 它们是在 android studio 中制作的 我正在尝试将项目 1 合并到项目 2 中 使其成为一个应用程序 我将如何去做呢 我知道如何在 eclipse 中执行此操作 但不知道如何在 an
  • 使用 dart::ffi 从 Dart 包中调试 C++ 代码

    我正在用 C 开发一个包 用于 Flutter 应用程序 因此在 Dart 中 使用飞镖 菲菲 https dart dev guides libraries c interop我想知道除了记录消息之外 是否有更好的方法来调试 逐步 变量监
  • 从返回堆栈恢复片段时的savedInstanceState

    我可以用吗savedInstanceState 删除片段时保存状态 然后从返回堆栈弹出片段时恢复状态 当我从返回堆栈恢复片段时 savedInstanceState 包始终为空 现在 应用程序流程是 创建片段 gt 删除片段 添加到后台堆栈
  • MySQL 可以对单个查询使用多个索引吗?

    想象一个具有多列的表 例如 id a b c d e 我通常选择通过id但是 客户端应用程序中有多个查询对列的子集使用各种条件 当MySQL在多列上使用多个WHERE条件对单表执行查询时 它真的可以利用在不同列上创建的索引吗 或者使其快速的
  • 以编程方式构建 SQL 查询的可靠方法

    我必须求助于 ORM 不足的原始 SQL 使用 Django 1 7 问题是大多数查询最终有 80 90 相似 我无法找出一种稳健且安全的方法来构建查询而不违反可重用性 字符串连接是唯一的出路吗 即使用构建无参数查询字符串if else条件
  • Cloud Functions FCM 预期 OAuth 2 访问令牌

    因此 自 7 月 29 日以来 我注意到我的 Firebase Cloud Functions 在尝试发送 FCM 消息时抛出错误 错误 请求缺少所需的身份验证凭据 预期的 OAuth 2 访问令牌 登录 cookie 或其他有效身份验证
  • Json字符串化范围错误

    我从 API 得到的结果如下 id 1 area zone T aisle side E col 1 level 0 position 0 name T E 1 id 2 area zone T aisle side E col 60 le
  • Objective C UITableView - 更改单元格高度后表格单元格显示错误的内容

    我正在尝试在 xcode 中构建一个应用程序 它除了其他应用程序之外还读取 rss 提要并显示帖子 我是 Objective C 的新手 有时发现它有点困难 我使用 NSMutableArray 来获取检索到的故事 帖子 每个故事都由一个
  • 使用 RVM 安装 Ruby 2.1.3 时出错

    我正在尝试使用 RVM 安装 Ruby 2 1 3 我安装了最新版本的 XCode 并且全新安装了 rvm 我基本上在做 rvm autolibs brew rvm install ruby 2 1 3 一切看起来都工作正常 但随后我收到此
  • CGContext 文本绘制在 iPhone 4 上无法按比例放大

    我正在尝试创建一个可以在 iPhone 4 上很好地缩放的应用程序 目前 它的大部分都可以完美缩放 除了一个关键部分 我在 CALayer 中的 drawInContext 方法内绘制的文本 这是我的代码 void drawInContex
  • 挂钩事件 Outlook VSTO 在主线程上继续工作

    我开发了一个 Outlook VSTO 插件 有些任务应该在后台线程上完成 通常 检查本地数据库中的某些内容或调用网络请求 阅读了几篇文章后 我放弃了在后台线程中调用 Outlook 对象模型 OOM 的想法 我有一些 wpf 控件 并且我
  • 在 django-rest-framework 中创建一个带有关系的rest api

    在 django rest framework 中创建一个rest api 我有2张桌子 拳头表 用户 id PK Name varchar 255 第二个表 地址 id PK address varchar 255 city id int