2017-10-20 12 views
0

この投稿時:Djangoの休憩Frameworkのエラー:{ "ユーザー":[ "このフィールドは必須です。"]

curl -X POST -H "Authorization: Token sometoken" -d "url=someurl" 127.0.0.1:8000/create/ 

を私はエラーを取得:

{"user":["This field is required."] with the ItemSerializer,

私は他の記事を見てきました私はユーザーオブジェクトを保存するために使用しようとしているperform_createの使用について話していますが、それは何らかの理由で機能しません。ユーザーは、このように定義されている場合Perform_create作品:

class UserDetailsSerializer(serializers.ModelSerializer): 
    class Meta: 
    model = UserModel 
    fields = ('pk', 'username', 'email', 'first_name', 'last_name') 
    read_only_fields = ('email',) 


class CategorySerializer(serializers.ModelSerializer): 
    class Meta: 
    model = Category 
    fields = ['cat'] 

class CommentSerializer(serializers.HyperlinkedModelSerializer): 
     class Meta: 
     model = Comment 
     fields = [ 
      'comment', 

     ] 

class ItemSerializer(serializers.HyperlinkedModelSerializer): 
    user = UserDetailsSerializer() 
    category = CategorySerializer(many=True) 
    thecomments = CommentSerializer(many=True) 
    timestamp = serializers.SerializerMethodField('get_mytimestamp') 

    def get_mytimestamp(self, obj): 
     return time.mktime(datetime.datetime.now().timetuple()) 

    class Meta: 
     model = Item 

     fields = [ 
     "url", 
     "user", 
     "timestamp", 
     "categories", 
     "thecomments", 
    ] 

モデル:

user = serializers.CharField(
    default=serializers.CurrentUserDefault() 
) 

しかし、私は、ユーザーオブジェクトを使用するだけでなく、ユーザ名

シリアライザを格納CharFieldです

表示:

class ItemCreateAPIView(generics.CreateAPIView): 
    serializer_class = ItemSerializer 

    def perform_create(self, serializer): 
     serializer.save(user=self.request.user) 

ソリューション:

シリアライザ項目を作成するには:

views.py

class ItemCreateAPIView(generics.CreateAPIView): 
    serializer_class = CreateSerializer 

    def perform_create(self, serializer): 
     serializer.save(user=self.request.user) 

ポスト:

curl -X POST -H "Authorization: Token sometoken" -d "url='someurl'" 127.0.0.1:8000/createitem/ 

答えて

0
class ItemSerializer(serializers.HyperlinkedModelSerializer): 
    user = UserDetailsSerializer() 
    category = CategorySerializer(many=True) 
    thecomments = CommentSerializer(many=True) 
    timestamp = serializers.SerializerMethodField('get_mytimestamp') 

    def get_mytimestamp(self, obj): 
     return time.mktime(datetime.datetime.now().timetuple()) 

    class Meta: 
     model = Item 

     fields = [ 
     "url", 
     "user", 
     "timestamp", 
     "categories", 
     "thecomments", 
     ] 
     extra_kwargs = {'user': {'required': False}} 

extra_kwargs = {'user': {'required': False}}をシリアライザに追加してくださいMeta

+0

私はまだ同じエラーが発生しますが、正しい方向でなければなりません。{'user':{required:False}}のようなものがあります。私も試しました user = UserDetailsS​​erializer(必須= False、read_only = True) しかし、それは与えます: '.create()'メソッドはデフォルトで書き込み可能なネストされたフィールドをサポートしていません。 シリアライザ 'app.serializers.ItemSerializer'に明示的な' .create() 'メソッドを書くか、ネストされたシリアライザフィールドに' read_only = True'を設定してください。 – DevB2F

+0

get要求を使用しているときに 'このフィールドは必須です'というエラーが表示されないため、これは投稿時にユーザーオブジェクトを作成することと関連しています。 – DevB2F

+0

'ItemSerializer'の' user = UserDetailsS​​erializer() 'を削除してください。 – Ykh

関連する問題