gpt4 book ai didi

Django Rest 框架错误 : {"user": ["This field is required."]

转载 作者:行者123 更新时间:2023-12-03 23:22:25 27 4
gpt4 key购买 nike

发帖时:

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

我收到错误:

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



我在 SO 上看到过其他关于使用 perform_create 的帖子,我试图用它来保存用户对象,但由于某种原因它不起作用。当用户定义如下时 Perform_create 工作:
user = serializers.CharField(
default=serializers.CurrentUserDefault()
)

但我想使用用户对象,不仅是 CharField 存储用户名

序列化器:
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",
]

模型:
class Item(models.Model):
url = models.CharField(max_length=1000)
user = models.ForeignKey('auth.User', unique=False)
timestamp = models.DateTimeField(auto_now_add=True)
url = models.CharField(max_length=1000)
categories = models.ManyToManyField(Category)

看法:
class ItemCreateAPIView(generics.CreateAPIView):
serializer_class = ItemSerializer

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

解决方案:

用于创建项目的序列化程序:
class CreateSerializer(serializers.HyperlinkedModelSerializer):
timestamp = serializers.SerializerMethodField('get_mytimestamp')

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

class Meta:
model = Item

fields = [
"url",
"timestamp",
]

View .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/

最佳答案

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

关于Django Rest 框架错误 : {"user": ["This field is required."],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46842120/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com