Django REST Framework:两个模型通过第三个模型嵌套(带有 2 个 FK)
Django REST Framework: Two models nested via a third one (with 2 FKs )
我的 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 路由的最佳方法是什么,以便我可以像这样参考 Thing
s:
'/users/{user_pk}/things/' # for listing
'/users/{user_pk}/things/{thing_pk}' # for a specific Thing
(应该通过 ThingUsage
访问与 User
相关的所有 Thing
)。
我猜我自己写 Router/ViewSet(或任何其他需要的)并不难,但我想知道是否有现成的解决方案(看到大量可用的 DRF 扩展)。
使用 drf-extensions 中的 nested routes
,试试这个:
#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()
我的 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 路由的最佳方法是什么,以便我可以像这样参考 Thing
s:
'/users/{user_pk}/things/' # for listing
'/users/{user_pk}/things/{thing_pk}' # for a specific Thing
(应该通过 ThingUsage
访问与 User
相关的所有 Thing
)。
我猜我自己写 Router/ViewSet(或任何其他需要的)并不难,但我想知道是否有现成的解决方案(看到大量可用的 DRF 扩展)。
使用 drf-extensions 中的 nested routes
,试试这个:
#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()