【发布时间】:2014-09-16 19:30:39
【问题描述】:
例如
class People(models.Model):
name = models.CharField(max_length=20)
class Blog(models.Model):
author = models.ForeignKeyField(People)
content = models.TextField()
然后,
class CreateBlogSerializer(serializers.Serializer):
#author id
author = serializers.IntegerField()
content = serializers.TextField()
在视图中,我需要获取 author_id ,检查 id 是否存在并获取作者实例,这样做很麻烦。
serializer = CreateBlogSerializer(data=request.DATA)
if serializer.is_valid():
try:
author = Author.objects.get(pk=serializer.data["author"])
except Author.DoesNotExist:
return Response(data={"author does not exist"})
blog = Blog.objects.create(author=author, content=serializer.data["content"])
是否有 ForeignKeyField 用于反序列化和验证主键数据,然后返回一个实例。
class CreateBlogSerializer(serializers.Serializer):
author = serializers.ForeignKeyField(Author)
content = serializers.TextField()
serializer = CreateBlogSerializer(data=request.DATA)
if serializer.is_valid():
#after deserialization , the author id becomes author model instance
blog = Blog.objects.create(author=serializer.data["author"], content=serializer.data["content"])
else:
#the author id does not exist will cause serializer.is_valid=Flase
PS
我知道ModelSerializer中的PrimaryKeyRelatedField,但是这里不能使用ModelSerializer,模型结构复杂,以上只是例子。
我的第一个想法是写一个客户字段。
【问题讨论】:
-
这篇文章中途您是否将
People切换为Author? -
在创建
Blog之前,您是否只想检查对于任何给定的Blog数据库中是否存在Author/People值? -
@isomarcte 是的,我想在序列化程序中这样做,然后序列化程序给我一个模型实例。它可以减少重复代码。
标签: django django-rest-framework