【发布时间】:2016-12-15 03:57:04
【问题描述】:
我在使用 django-rest-framework ModelViewset create(self, request) 方法从请求中获取对象数据时遇到问题。
这是我的model.py
class Heat(models.Model):
# Relationship Fields
animal = models.ForeignKey(
Animal, related_name='heats',
on_delete=models.CASCADE
)
# Fields
performer = models.CharField(max_length=25)
is_bred = models.BooleanField(default=False)
note = models.TextField(max_length=250, blank=True, null=True)
这是我的serializers.py
class HeatSerializer(serializers.ModelSerializer):
class Meta:
model = Heat
fields = [
'id',
'animal',
'performer',
'is_bred',
'note',
]
这里是我们可以在我的 ModelViewset 中找到错误的地方:
class HeatViewSet(viewsets.ModelViewSet):
queryset = Heat.objects.all()
serializer_class = HeatSerializer
@transaction.atomic
def create(self, request):
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
print serializer.validated_data['animal']
如果你看这行代码:
// this purpose is to print the actual value of an animal object
// but it gave me the TypeError: <Animal: Animal object> is not JSON serializable.
print serializer.validated_data['animal']
如果我们包含这个,它就可以正常工作,因为它只是一个普通字段,与另一个字段相同,除了作为关系字段的动物:
print serializer.validated_data['performer']
现在,当我这样做时,对象被直接保存到数据库中。
serializer.save()
但是 django 会提示我 SAME TYPE ERROR!
删除整个create(self, request) 时,方法流程运行良好且不会出现错误,但我想在create(self, request)! 中执行许多查询。这也不对,请帮忙!
【问题讨论】:
-
你需要为
Animal类写一个序列化器并添加到HeatSerializer。 -
我在
HeatSerializer中做了animal = AnimalSerializer仍然无法工作 -
喜欢吗?
animal = AnimalSerializer(source='animal_set', many=True, read_only=True) -
我做了,但 django-rest-framework 中的动物消失了,django 视图提示我
KeyError: 'animal' -
哪个 DRF 版本?
标签: python json django django-rest-framework