大佬教程收集整理的这篇文章主要介绍了`.create()` 方法默认不支持可写点源字段。为序列化程序编写一个显式的 `.create()` 方法,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试在我的借阅视图中启用 post 方法以启用管理员、从当前用户中选择以及从可用书籍中进行选择。
serializers.py
class BookListserializer(serializers.Modelserializer):
authors = serializers.SlugrelatedFIEld(many = True,queryset = models.Author.objects.all(),slug_fIEld = 'name',) #To represent the relationship as a String instead of ID
genre = serializers.SlugrelatedFIEld(many = True,queryset = models.Genre.objects.all(),slug_fIEld = 'name')
class Meta:
model = models.book
fIElds = ('name','authors','raTing','genre')
class Borrowedserializer(serializers.Modelserializer):
who_borrowed = serializers.primaryKeyRelatedFIEld(queryset = get_user_R_219_11845@odel().objects.all(),source = 'who_borrowed.username',)
name = serializers.primaryKeyRelatedFIEld(queryset = models.book.objects.all(),source = 'name.name',)
#borrowed_date = serializers.datetiR_219_11845@eFIEld(format = "%H:%M,%d-%m-%Y")
#returned_date = serializers.datetiR_219_11845@eFIEld(format = "%H:%M,%d-%m-%Y" )
class Meta:
model = models.borrowed
fIElds = ('who_borrowed','name','has_returned','borrowed_date','returned_date',)
然后是我的模型
@H_894_5@models.py class Book(models.Model): name = models.CharFIEld(max_length = 150,) #name of books authors = models.ManyToManyFIEld(Author,) genre = models.ManyToManyFIEld(GenrE) publisher = models.ForeignKey(Publisher,on_delete = models.SET_DEFAulT,default = '2') #A book should have a publisher will include a none fIEld for books without publishers pub_date = models.DateFIEld() price = models.decimalFIEld(max_digits = 10,decimal_places = 2) isbn = models.CharFIEld(max_length = 13,unique = True,null = True,blank = True,valIDators = [MinLengthValIDator(13)]) class Borrowed(models.Model): #Model for users borrowing and returning name = models.ForeignKey(Book,on_delete = models.CASCADE,) #ConsIDer making one to many fIEld borrowed_date = models.datetiR_219_11845@eFIEld(auto_Now_add = True,) #Date is created as soon as instance is created has_returned = models.BooleanFIEld(default = falsE) #FIEld that determines if a model is returend or not returned_date = models.datetiR_219_11845@eFIEld(null = True,) #Date that changes as soon as book is returned who_borrowed = models.ForeignKey(get_user_R_219_11845@odel(),default ='9c495b90-3900-43d1-875d-6b15d5d5ab55')
Django 可浏览 API 显示可供选择的书籍和用户借书的方式,但当我想发布请求时,它会显示标题中的错误。 我不知道如何创建一个允许显示这些选项并允许发布或放置请求的创建方法。
简而言之,如果我删除源参数,一切正常,但我希望显示的数据不是 ID 或 UUID,而是用户名和书名。
在您的情况下,以下更改应该足够了。
class Borrowedserializer(serializers.Modelserializer):
who_borrowed = serializers.primaryKeyRelatedField(queryset = get_user_R_219_11845@odel().objects.all(),source = 'who_borrowed.username',)
name = serializers.primaryKeyRelatedField(queryset = models.book.objects.all(),source = 'name.name',)
class Meta:
model = models.borrowed
fields = ('who_borrowed','name','has_returned','borrowed_date','returned_date',)
def create(self,validated_data):
return models.borrowed.objects.create(**validated_data)
# or
# return super(Borrowedserializer,self).create(validated_data)
,
class Borrowedserializer(serializers.Modelserializer):
who_borrowed = serializers.SlugRelatedField(queryset = get_user_R_219_11845@odel().objects.all(),slug_field = 'username')
name = serializers.SlugRelatedField(queryset = models.book.objects.all(),slug_field = 'name')
将“primaryKeyRelatedFields”更改为“SlugRelatedFields”也对我有用。
以上是大佬教程为你收集整理的`.create()` 方法默认不支持可写点源字段。为序列化程序编写一个显式的 `.create()` 方法全部内容,希望文章能够帮你解决`.create()` 方法默认不支持可写点源字段。为序列化程序编写一个显式的 `.create()` 方法所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。