我的模型看起来像这样:
class Category(models.Model):
parentCategory = models.ForeignKey('self', blank=True, null=True, related_name='subcategories')
name = models.CharField(max_length=200)
description = models.CharField(max_length=500)
Run Code Online (Sandbox Code Playgroud)
我设法用序列化器获得所有类别的平面json表示:
class CategorySerializer(serializers.HyperlinkedModelSerializer):
parentCategory = serializers.PrimaryKeyRelatedField()
subcategories = serializers.ManyRelatedField()
class Meta:
model = Category
fields = ('parentCategory', 'name', 'description', 'subcategories')
Run Code Online (Sandbox Code Playgroud)
现在我想要做的是子类别列表具有子类别的内联json表示而不是它们的ID.我怎么用django-rest-framework做到这一点?我试图在文档中找到它,但似乎不完整.
假设我有一个制表符分隔文件,其中包含如下格式化的用户活动数据:
timestamp user_id page_id action_id
Run Code Online (Sandbox Code Playgroud)
我想编写一个hadoop作业来计算每个页面上的用户操作,因此输出文件应如下所示:
user_id page_id number_of_actions
Run Code Online (Sandbox Code Playgroud)
我需要像复合键这样的东西 - 它将包含user_id和page_id.使用hadoop有没有通用的方法呢?我找不到任何有用的东西.到目前为止,我在mapper中发出这样的键:
context.write(new Text(user_id + "\t" + page_id), one);
Run Code Online (Sandbox Code Playgroud)
它有效,但我觉得这不是最好的解决方案.
我的模型看起来像这样:
class MenuItem(models.Model):
name = models.CharField(max_length=500)
components = models.ManyToManyField(Component, through=MenuItemComponent)
class Component(models.Model):
name = models.CharField(max_length=500)
class MenuItemComponent(models.Model):
menuItem = models.ForeignKey('MenuItem')
component = models.ForeignKey(Component)
isReplaceable = models.BooleanField()
Run Code Online (Sandbox Code Playgroud)
我想做的是在给定的MenuItem中公开一个包含isReplaceable字段的组件列表(NOT MenuItemComponents).到目前为止,我有:
#views.py
class MenuItemComponentList(generics.ListAPIView):
"""
Displays components for given MenuItem
"""
model = MenuItemComponent
serializer_class = MenuItemComponentSerializer
def get_queryset(self):
itemId = self.kwargs['itemId']
return MenuItemComponent.objects.filter(menuItem__pk=itemId)
#serializers.py
class MenuItemComponentSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = MenuItemComponent
Run Code Online (Sandbox Code Playgroud)
其中公开了MenuItemComponents列表并强制客户端进行多次调用以检索所有组件.使用isReplaceable字段中的其他数据公开组件列表可以解决问题.
编辑
最后,我想得到一个列出组件元素的列表,但元素是用MenuItemComponent模型中的isReplaceable字段扩展的:
{
"count": 2,
"next": null,
"previous": null,
"results": [
{
"url": "http://localhost:8000/api/component/1/",
"name": "component 1",
"isReplaceable": true
}, …Run Code Online (Sandbox Code Playgroud) 假设我有一个这样的模型:
class Car(models.Model):
images = models.ManyToManyField(Image)
class Image(models.Model):
path = models.CharField()
type = models.CharField()
Run Code Online (Sandbox Code Playgroud)
我想公开两个 API 视图:
在列表视图中,我只想显示 type="thumbnail" 的图像。在详细信息视图中,我想显示 type="image" 的图像。
这或多或少是列表的样子:
[{
"id": 1,
"images": [1, 2],
},
{
"id": 2,
"images": [3, 4],
}]
Run Code Online (Sandbox Code Playgroud)
和详细信息视图:
{
"id": 1,
"images": [5],
}
Run Code Online (Sandbox Code Playgroud)
请注意,根据视图显示不同的图像 ID。
到目前为止,我的序列化程序如下所示:
class CarSerializer(serializers.ModelSerializer):
images = serializers.ManyPrimaryKeyRelatedField()
class Meta:
model = Car
Run Code Online (Sandbox Code Playgroud)
列出 api 视图:
class CarList(generics.ListAPIView):
model = Car
serializer_class = CarSerializer
Run Code Online (Sandbox Code Playgroud)
详细api视图:
class CarDetails(generics.RetrieveAPIView):
model = Car
serializer_class = CarSerializer
Run Code Online (Sandbox Code Playgroud)
这当然为我提供了列表中的所有图像以及详细信息,并强制客户端进行额外调用以获取应显示的图像类型。 …