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/
私はまだ同じエラーが発生しますが、正しい方向でなければなりません。{'user':{required:False}}のようなものがあります。私も試しました user = UserDetailsSerializer(必須= False、read_only = True) しかし、それは与えます: '.create()'メソッドはデフォルトで書き込み可能なネストされたフィールドをサポートしていません。 シリアライザ 'app.serializers.ItemSerializer'に明示的な' .create() 'メソッドを書くか、ネストされたシリアライザフィールドに' read_only = True'を設定してください。 – DevB2F
get要求を使用しているときに 'このフィールドは必須です'というエラーが表示されないため、これは投稿時にユーザーオブジェクトを作成することと関連しています。 – DevB2F
'ItemSerializer'の' user = UserDetailsSerializer() 'を削除してください。 – Ykh