Хорошо, я нашел способ сделать это как через API, так и через администратора. Это в основном напоминает идею Роба.
Прежде всего, каждый раз, когда я создаю нового пользователя через панель администратора, мне нужно добавить пользователя к моим элементам:
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 Framework, мне нужно добавить пару методов в My custom 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
Я использовал документацию и (много) проб и ошибок, чтобы понять это.
person
Nikolay Derkach
schedule
12.12.2013