我正在使用 Django Rest Framework 和 Angularjs 创建一个网站,该网站获取发型师的信息并将其保存到数据库中。还有另一个页面可以从数据库中提取该信息并将其显示在个人资料页面上。
我遇到的问题是,当我调用该数据时,它返回 unicode 前缀 'u,而 javascript 不允许我使用它。
这是我得到的返回:
{"stylist":"{u'email': u'chris@internet.com', u'profession': {u'esthetician': True, u'hair_stylist': True}, u'name': u'Chris', u'certification': u'no'}","created_at":"2015-05-04T19:27:19.482058Z","updated_at":"2015-05-04T19:27:19.511937Z"}
我的模型:
class StylistSubmission(models.Model):
stylist = models.CharField(max_length=2500, null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __unicode__(self):
return self.stylist
我的序列化器.py:
class StylistSerializer(serializers.ModelSerializer):
class Meta:
model = StylistSubmission
fields = (
'stylist',
'created_at',
'updated_at'
)
read_only_fields = ('created_at', 'updated_at')
我的观点.py:
class StylistViewSet(viewsets.ModelViewSet):
queryset = StylistSubmission.objects.order_by('-created_at')
serializer_class = StylistSerializer
def perform_create(self, serializer):
instance = serializer.save()
post_save.send(sender=self.__class__, stylist=instance.stylist)
return super(StylistViewSet, self).perform_create(serializer)
这几天我一直在用头撞墙,试图解决这个问题。我对 django Rest 框架很陌生,对 Angular 也很陌生,所以我可能会遗漏一些明显的东西。任何帮助将不胜感激。
最佳答案
考虑到预期的关注点分离,我建议让 Perform_create 函数专注于“保存”模型。
create() 函数(来自 CreateModelMixin 父级)是负责生成 HTTP 响应的函数,因此这是渲染和发出响应的更好位置,对吗?
from rest_framework.renderers import JSONRenderer
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(JSONRenderer.render({'stylist': serializer.data}), status=status.HTTP_201_CREATED, headers=headers)
PS:通常,RESTful 端点只会发出 Stylist 对象,而不是将其包装在另一个键(“stylist”)内。由于它是对 create POST 的响应,因此暗示返回的对象将是 Stylist 对象。
关于javascript - Django Rest 框架正在从数据库中返回 'u 前缀到 Angular,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30038541/