Python Django REST框架:通过第三个模型嵌套的两个模型(带有2个FK)
我的Django项目中有两个主要模型: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
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