小编Jac*_*ski的帖子

Django休息框架嵌套自引用对象

我的模型看起来像这样:

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做到这一点?我试图在文档中找到它,但似乎不完整.

django django-rest-framework

74
推荐指数
10
解决办法
4万
查看次数

Hadoop - 复合键

假设我有一个制表符分隔文件,其中包含如下格式化的用户活动数据:

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)

它有效,但我觉得这不是最好的解决方案.

hadoop composite-key

11
推荐指数
1
解决办法
6117
查看次数

如何使用django-rest-framework在序列化程序级别上扩展模型

我的模型看起来像这样:

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)

python django-rest-framework

5
推荐指数
1
解决办法
8494
查看次数

Django rest 框架 - 过滤多对多字段

假设我有一个这样的模型:

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)

这当然为我提供了列表中的所有图像以及详细信息,并强制客户端进行额外调用以获取应显示的图像类型。 …

django django-rest-framework

5
推荐指数
2
解决办法
8667
查看次数