好的,我找到了一种通过 API 和管理员来完成的方法。这基本上类似于 Rob 的想法。
首先,每次我通过管理面板创建新用户时,我都需要将用户附加到我的项目:
class MyAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
if getattr(obj, 'user', None) is None:
obj.user = request.user
obj.save()
admin.site.register(MyItem, MyAdmin)
然后在访问我的模型时,我只是按用户过滤(顺便说一句,这是 django.contrib.auth.models.User 的外键):
MyItem.objects.filter(user=request.user)
最后要让它与 Django REST 框架一起工作,我需要向我的自定义 ModelViewSet 添加几个方法:
class MyItemViewSet(viewsets.ModelViewSet):
model = MyItem
serializer_class = MyItemSerializer
def get_queryset(self):
return MyItem.objects.filter(user=self.request.user)
def pre_save(self, obj):
obj.user = self.request.user
我已经使用文档和(大量)试验和错误来解决这个问题。