Python Django REST框架:通过第三个模型嵌套的两个模型(带有2个FK)

Python Django REST框架:通过第三个模型嵌套的两个模型(带有2个FK),python,django,django-rest-framework,foreign-key-relationship,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

我的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
(应该通过
thinguage
)访问与
用户相关的所有
内容


我猜写我自己的路由器/视图集(或其他需要的东西)并不难,但我想知道是否有现成的解决方案(查看大量可用的DRF扩展)。

使用
嵌套路由
从,尝试以下方法:

#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()

我确实想过这样做,但出于愚蠢的原因放弃了这个想法。。。。但它是有效的!谢谢(顺便说一句:必须使用
东西使用方法\uuu用户\uu用户名
)是的,我没有注意到你有
相关的东西使用方法
,但是
\uu用户名
?您的
UserViewSet
中是否有
lookup\u字段='username'
?是的,我的UserViewSet有点不同。很抱歉混淆了。没问题,重要的是你已经设法让它工作了:)在你的Thinguage中添加一个多个用户或东西,并将你的through表设置为Thinguage,django将为你解决直接关系,这样你就不必通过usages直接访问User.things和thing.users