Django 休息框架正在从数据库返回 'u 前缀到 angular
Django rest framework is returning 'u prefix to angular from the database
我正在使用 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
我的serializers.py:
class StylistSerializer(serializers.ModelSerializer):
class Meta:
model = StylistSubmission
fields = (
'stylist',
'created_at',
'updated_at'
)
read_only_fields = ('created_at', 'updated_at')
我的views.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 函数以专注于 "saving" 模型。
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')。由于它是对创建 POST 的响应,这意味着返回的对象将是 Stylist 对象。
我正在使用 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
我的serializers.py:
class StylistSerializer(serializers.ModelSerializer):
class Meta:
model = StylistSubmission
fields = (
'stylist',
'created_at',
'updated_at'
)
read_only_fields = ('created_at', 'updated_at')
我的views.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 函数以专注于 "saving" 模型。
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')。由于它是对创建 POST 的响应,这意味着返回的对象将是 Stylist 对象。