2016-12-23 5 views
0

Я разрабатываю приложение в django-rest-framework. Ниже мой сериализатору:Как добавить текущего пользователя в поле в сериализаторе модели django

class MySerializer(serializers.HyperlinkedModelSerializer): 
    class Meta: 
     model = My 
     fields = ('user','title','description') 

Проблема заключается в том, что, когда я запускаю его, он просит пользователю выбрать, как это:

enter image description here

Я хочу, чтобы в зависимости от того пользователь вошел в систему, он должен быть добавлен в поле пользователя автоматически. В разработке сайта django я использовал это, используя request.user, но как это сделать в django rest framework?

+0

Попробуйте http://stackoverflow.com/questions/35518273/ как установить-текущий-пользователь-пользователь-field-in-django-rest-framework – neverwalkaloner

+0

Я использую modelViewSet, а не generics.ListCreateAPIView для моих просмотров. – Elisha512

ответ

0

Класс по умолчанию, который может использоваться для представления текущего пользователя. Чтобы использовать это, «запрос» должен быть предоставлен как часть контекстного словаря при создании экземпляра сериализатора.

owner = serializers.HiddenField(
    default=serializers.CurrentUserDefault() 
) 

Подробнее здесь: http://www.django-rest-framework.org/api-guide/validators/#currentuserdefault

Надежда это поможет

0

Вы бы сделать что-то вроде класса

MySerializer(serializers.HyperlinkedModelSerializer): 
    user = serializers.ReadOnlyField() 
    class Meta: 
     model = My 
     fields = ('user','title','description') 

При вызове сериалайзер, вы просто добавить ток пользователя в сериализаторе, либо в виде views.py, либо в методе создания сериализатора.

  1. В views.py

    serializer.save(user=request.user)

  2. В сериализатором создать метод

    def create(self, validated_data): validated_data['user'] = request.user.id obj = ExampleModel.objects.create(**validated_data) return obj

+0

где именно я должен поставить def create (self, validated_data) :? – Elisha512

+0

По синтаксису ваше решение кажется правильным, но я получаю следующую ошибку: <Пользователь: [my_username]> не JSON serializable – Elisha512

+0

oh, тогда вы можете захотеть изменить 'user = serializers.ReadOnlyField()' insto something like 'user = serializers.ReadOnlyField (source = 'user.id')' – shady

Смежные вопросы