python - Django REST框架: Two models nested via a third one (with 2 FKs )

标签 python django django-rest-framework foreign-key-relationship

我的 Django 项目中有两个主要模型:

class User(Model):  # let's say this is the built-in User model
    ...

class Thing(Model):
    ...

我有一个定义它们关系的辅助模型:

class ThingUsage(Model):
    user = ForeignKey(User, related_name='thing_usages')
    thing = ForeignKey(Thing, related_name='thing_usages')
    role = CharField()

设置 DRF 路由的最佳方法是什么,以便我可以引用这样的事物:

'/users/{user_pk}/things/'  # for listing
'/users/{user_pk}/things/{thing_pk}'  # for a specific Thing

(应通过 ThingUsage 访问与 User 相关的所有 Thing)。

我猜测编写自己的 Router/ViewSet (或其他需要的东西)并不难,但我想知道是否有一个现成的解决方案(看到大量可用的 DRF 扩展) )。

最佳答案

使用 drf-extensions 中的嵌套路由 ,试试这个:

#inside urls.py
router = ExtendedSimpleRouter()
(
    router.register(r'users', UserViewSet)
          .register(r'things', ThingViewSet, parents_query_lookups=['thing_usages__user'])
)

#inside views.py
class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()


class ThingViewSet(NestedViewSetMixin, viewsets.ModelViewSet):
    queryset = Thing.objects.all()

关于python - Django REST框架: Two models nested via a third one (with 2 FKs ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28921029/

相关文章:

Django REST框架RetrieveAPIView获取空 "id"参数并返回404错误

python - 在 python 中,如何在 django 或 Flask 等 REST 服务中仅加载一次 ML 模型?

Python:用不同的数字替换数组中的每个数字

Python - 如果在嵌套列表中找到字符串则返回 true

python - 如何在webserver上使用python做网页

django - "invalid literal for int() with base 10:"但不明白为什么它要访问整数

python - base.html 中的 Django 变量

python - 两条记录消息记录为一行

jquery - 使用ajax删除Django db中的记录