【发布时间】:2017-03-15 11:51:07
【问题描述】:
我的models.py:
class CUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(_('email address'), max_length=254, unique=True)
first_name = models.CharField(_('first name'), max_length=30)
last_updated = models.DateTimeField(_('last updated'), default=timezone.now)
class SL(models.Model):
name = models.CharField(max_length=32)
last_updated = models.DateTimeField(default=timezone.now)
uuid = models.UUIDField(primary_key=True)
class Key(models.Model):
last_updated = models.DateTimeField(default=timezone.now)
name = models.CharField(max_length=32, default = 'Unnamed')
sl_uuid = models.ForeignKey(SL, related_name='ssls')
user = models.ForeignKey(CUser)
urls.py:
urlpatterns = [
url(r'^getstate/$', views.GetStateView.as_view(), name='getstate'),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
]
serializers.py:
class SLSerializer(serializers.Serializer):
queryset=SL.objects.all()
class Meta:
model = SL
fields = (
'name',
'uuid',
'last_updated',
)
class GetStateSerializer(serializers.ModelSerializer):
sls = SLSerializer(many=True)
class Meta:
model = User
fields = tuple(User.REQUIRED_FIELDS) + (
User.USERNAME_FIELD,
'last_updated',
'sls',
)
read_only_fields = (
User.USERNAME_FIELD,
)
views.py:
class GetStateView(generics.RetrieveAPIView):
queryset = User.objects.all()
serializer_class = serializers.GetStateSerializer
permission_classes = (
permissions.IsAuthenticated,
)
def get_object(self, *args, **kwargs):
return self.request.user
我想得到 json 响应:
{
"email":"abc.com",
"first_name":"abc",
"last_updated":"2016-11-02T02:12:36Z",
"sls": [
{
"name":"123",
"last_updated":"2016-11-02T02:12:36Z",
"uuid":"ac9d496d-62ba-45a1-a1ec-e1eca571b656"
},
{
"name":"23",
"last_updated":"2016-11-02T02:12:36Z",
"uuid":"ac9d496d-62ba-45a1-a1ec-e1eca571b656"
}
]
}
我将 SL 条目设为空:
{
"first_name": "Monica",
"email": "abc@abc.com",
"last_updated": "2016-11-02T02:12:46Z",
"sls": [
{},
{}
]
}
它使用令牌身份验证,并将使用key 表为请求用户(我正在使用 self.request.user)选择所有 SL,并将发送用户详细信息以及 SL 条目。
但我不知道该怎么做。
【问题讨论】:
-
@Sayse 这不是上述问题的重复。黑白表的关系完全不同。我很难根据关系序列化数据。所以我会要求你再看看这个问题。我是框架的初学者,所以我很难解决这个问题。
-
但是您的视图从不调用任何序列化程序。它永远不会返回任何类型的模型数据。
-
@DanielRoseman 我已经指定了 serializer_class serializer_class= serializers.GetStateSerializer。不是这样吗?
-
嗯,通常情况下,但是您已经覆盖了
get,这通常称为序列化程序。所以你需要自己调用它。 (请注意,正是由于这个原因,覆盖get或post通常是个坏主意。)
标签: python django api serialization django-rest-framework