小编Dan*_*kov的帖子

Django REST Framework图像上传

我有型号产品:

def productFile(instance, filename):
    return '/'.join( ['products', str(instance.id), filename] )

class Product(models.Model):
    ...

    image = models.ImageField(
        upload_to=productFile,
        max_length=254, blank=True, null=True
    )
    ...
Run Code Online (Sandbox Code Playgroud)

然后我有序列化器:

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = (
            ...
            'image',
            ...
        )
Run Code Online (Sandbox Code Playgroud)

然后我有意见:

class ProductViewSet(BaseViewSet, viewsets.ModelViewSet):
    queryset = Product.objects.all()
    serializer_class = ProductSerializer
Run Code Online (Sandbox Code Playgroud)

如何使用Postman上传图片?将图像上传到模型的最佳做法是什么?谢谢.

django image-upload django-rest-framework

16
推荐指数
2
解决办法
2万
查看次数

Django休息框架:如何在ModelViewSet中关闭/打开分页

我正在使用Django REST框架djangorestframework-csv以及默认的分页设置,但是当请求的格式为"CSV"时,就没有必要使用paginaion.可以禁用分页:

pagination_class = None

有可能动态地改变它吗?

class ObjectViewSet(BaseViewSet, viewsets.ModelViewSet):

    queryset = Object.objects.none()
    serializer_class = ObjectSerializer
    pagination_class = None # if format is "CSV"
    # pagination_class = None # if fromat isn't "CSV"
Run Code Online (Sandbox Code Playgroud)

谢谢.

csv django pagination django-rest-framework

5
推荐指数
3
解决办法
2214
查看次数

Networkx:查找Graph中多个节点之一的最短路径

我有一个不同位置的图表:

import networkx as nx

G = nx.Graph()
for edge in Edge.objects.all():
    G.add_edge(edge.from_location, edge.to_location, weight=edge.distance)
Run Code Online (Sandbox Code Playgroud)

位置(节点)有不同的类型(厕所,建筑物入口等)我需要找到从某个给定位置到特定类型的任何位置的最短路径.(例如:从给定节点查找最近的入口.)

Networkx库中是否有一些方法可以解决没有循环的问题?就像是:

nx.shortest_path(
     G,
     source=start_location,
     target=[first_location, second_location],
     weight='weight'
)
Run Code Online (Sandbox Code Playgroud)

如果两个位置属于同一类型,则结果将是first_location或second_location的最短路径.

是否有一些方法也返回路径长度?

python graph networkx

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

Django REST 框架范围过滤器

如何在 Django REST Framework 中对日期和数字进行范围过滤?其他过滤器(lt、gt 等)工作正常。我尝试了许多变体,例如:

import rest_framework_filters as filters

class OrderFilter(filters.FilterSet):
    total_price__range = filters.RangeFilter(name='total_price')
    created_at__range = filters.DateFromToRangeFilter(name='created_at')
    ....
    class Meta:
        model = Order

        fields = {
            'created_at__range': ['__all__'],
            'total_price__range': ['__all__'],
            ...
            }

class OrderViewSet(BaseViewSet, viewsets.ModelViewSet):
    filter_class = OrderFilter
    ....
Run Code Online (Sandbox Code Playgroud)

在可浏览的 api 中,当我点击底部的“过滤器”时有一些字段,然后 url 看起来像:

/orders/?created_at__range_0=2017-05-22&created_at__range_1=2017-05-22
Run Code Online (Sandbox Code Playgroud)

它不起作用。我需要类似的东西

/orders/?created_at__range=2017-05-22,2017-05-24
Run Code Online (Sandbox Code Playgroud)

与整数相同:

/orders/?total_price__range=1000,2000
Run Code Online (Sandbox Code Playgroud)

它被描述为here

我究竟做错了什么?

django range filter django-rest-framework

4
推荐指数
1
解决办法
5570
查看次数

Django 注释 Concat - 表达式包含混合类型。您必须设置 output_field

我有一个模型:

class Motocycle(models.Model):
    title = models.CharField(max_length=50, blank=True, default='')
    engine_displacement = models.IntegerField(default=0)
Run Code Online (Sandbox Code Playgroud)

我想:

queryset = Motocycle.objects.annotate(
    full_name=Concat(
        'title',
         Value(' '),
         F('engine_displacement'),
         Value('')
    ),
).all()
Run Code Online (Sandbox Code Playgroud)

但是出现错误Expression contains mixed types. You must set output_field::

queryset = Motocycle.objects.annotate(
    full_name=Concat(
        'title',
         Value(' '),
         F('engine_displacement'),
         Value(''),
    ),
    output_field=CharField(),
).all()
Run Code Online (Sandbox Code Playgroud)

我试图设置这个output_field,结果是:'CharField' object has no attribute 'resolve_expression'

我做错了什么?谢谢你。

django annotate

3
推荐指数
1
解决办法
2214
查看次数

Django Rest Framework自定义过滤器-按孩子数进行顺序搜索

我将DRFdjango-rest-framework-filters一起使用

模型是:具有许多OrderItems的订单。任务是创建过滤器,该过滤器使您能够按订单项计数或按计数排序搜索订单。

在我的view.py中:

class OrderFilter(filters.FilterSet):
    order_items_count = filters.NumberFilter(name="order_items__count")
    customer = filters.RelatedFilter(
        CustomerFilter,
        name='customer',
        queryset=Customer.objects.all(),
        )

    class Meta:
        model = Order
        fields = {
            'internal_code': ['icontains'],
            'notes': ['icontains'],
            'status': ['exact'],
            'complete': ['exact'],
            'order_items_count': ['exact']
            }

class OrderViewSet(BaseViewSet, viewsets.ModelViewSet):
    queryset = Order.objects.all()
    serializer_class = OrderSerializer
    filter_class = OrderFilter
    filter_backends = (
        OrderingFilter,
        DjangoFilterBackend,
        )
    ordering_fields = (
        'internal_code',
        'notes',
        'status',
        'complete',
        'customer__title',
        'order_items__count',
        )
Run Code Online (Sandbox Code Playgroud)

应要求/orders?order_items_count=2我得到了错误:相关字段具有无效的查找:计数

如何为模型的子代数创建自定义过滤器?谢谢。

PS这是我对stackowerflow的第一个问题,对不起样式错误。

django django-rest-framework

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