本地服务器上的Django都可以正常工作,但是Postgres正在过滤坏的a查询

2024-09-25 10:25:38 发布

您现在位置:Python中文网/ 问答频道 /正文

你好吗?首先对不起我的英语不好。你知道吗

我的DigitalOcean服务器有问题。我让服务器在带有postgres的Django中运行,在本地使用SQLite。你知道吗

在这两个版本中,我在本地windows中使用python3.4,在Ubuntu和python3.4.0中使用python3.4.3

筛选查询时遇到问题。你知道吗

这就是模型

# Create your models here.
class WorkOrder(models.Model):
    fk_client = models.ForeignKey(Client, verbose_name='Cliente')
    fk_store = models.ForeignKey(Store, verbose_name='Local')
    store_internal_order = models.CharField(verbose_name='Orden Interna',
                                            max_length=10,
                                            null=True,
                                            blank=True)
    sector = models.IntegerField(verbose_name='Sector',
                                 choices=SECTOR_CHOICES,
                                 default=1)
    article = models.CharField(verbose_name='Dispositivo', max_length=20)
    serial = models.CharField(verbose_name='Serial', max_length=25)
    work = models.CharField(verbose_name='Trabajo', max_length=40)
    article_details = models.CharField(verbose_name='Detalles Artículo',
                                       max_length=255, blank=True)
    cash_advance = models.DecimalField(verbose_name='Seña', max_digits=6,
                                       decimal_places=2,
                                       default=0)
    initial_price = models.DecimalField(verbose_name='Precio', max_digits=6,
                                        decimal_places=2,
                                        default=0)
    service_cost = models.DecimalField(verbose_name='Costo', max_digits=6,
                                       decimal_places=2,
                                       default=0)
    randpassw = models.CharField(default='12345', max_length=5, blank=True,
                                 null=True)
    warranty = models.PositiveSmallIntegerField(verbose_name='Garantía',
                                                default=0,
                                                blank=True,
                                                null=True)
    last_status = models.IntegerField(verbose_name='Estado',
                                      choices=STATUS_CHOICES,
                                      default=1)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)

    def __str__(self):
        return str(self.id)

这就是风景

def index(request):
    if not request.user.is_authenticated():
        return redirect('auth_login')

    title = "Lista de Ordenes"
    # Creamos el query para tomar las ordenes
    queryset = WorkOrder.objects.all()
    queryset = queryset.exclude(last_status=20)
    # Tomamos el filtro de sector
    sector_filter = request.GET.get('sector')
    # Tomamos filtro de ENTREGADAS
    # delivered = reqeust.GET.get('delivered')

    context = {
               'title': title,
              }

    if not request.user.is_staff:
        user_store = request.user.userprofile.fk_store
        # Añadimos otro filtro al queryset para tomar solo las del local
        # correspondiente al usuario
        queryset = queryset.filter(fk_store=user_store)
        store = Store.objects.get(name=user_store)

        context.update({'store': store})

    # Si hay un filtro de sector volvemos a filtrar el queryset
    if sector_filter:
        queryset = queryset.filter(sector=sector_filter)

    context.update({'queryset': queryset})

    paginator = Paginator(queryset, 7)  # Show 5 orders per page

    page = request.GET.get('page')
    try:
        orders = paginator.page(page)
    except PageNotAnInteger:
        # If the page is not an integer, deliver first page
        orders = paginator.page(1)
    except EmptyPage:
        orders = paginator.page(paginator.num_pages)

    context.update({'orders': orders})

    return render(request, "workorders/index.html", context)

这是我的问题,我必须过滤最后状态为“20”(int)的所有工单

在当地工作完美!我可以看到除了最后状态为20的订单以外的所有订单。但在数码海洋VPS的生产中,gunicorn正在运行。查询只显示最后状态为1的订单,并过滤所有其他订单。你知道吗

我首先尝试使用这个查询集queryset = WorkOrder.objects.filter(~Q(last_status=20)),然后更改为您可以在我的视图中看到的查询集。两者在当地都能很好地工作,但在生产中却不行。你知道吗

编辑:添加queryset.query查询我在生产过程中所拥有的

这是照片的印刷品queryset.query查询在生产中的控制台中

Python 3.4.0 (default, Jun 19 2015, 14:20:21)
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from work_order.models import WorkOrder
>>> queryset = WorkOrder.objects.all()
>>> queryset = queryset.exclude(last_status=20)
>>> print(queryset.query)
SELECT "work_order_workorder"."id", "work_order_workorder"."fk_client_id", "work_order_workorder"."fk_store_id", "work_order_workorder"."store_internal_order", "work_order_workorder"."sector", "work_order_workorder"."article", "work_order_workorder"."serial", "work_order_workorder"."work", "work_order_workorder"."article_details", "work_order_workorder"."cash_advance", "work_order_workorder"."initial_price", "work_order_workorder"."service_cost", "work_order_workorder"."randpassw", "work_order_workorder"."warranty", "work_order_workorder"."last_status", "work_order_workorder"."timestamp" FROM "work_order_workorder" WHERE NOT ("work_order_workorder"."last_status" = 20)
>>> queryset
[<WorkOrder: 3>, <WorkOrder: 4>, <WorkOrder: 5>, <WorkOrder: 7>, <WorkOrder: 8>, <WorkOrder: 9>, <WorkOrder: 11>, <WorkOrder: 12>, <WorkOrder: 13>, <WorkOrder: 14>, <WorkOrder: 15>, <WorkOrder: 16>, <WorkOrder: 17>, <WorkOrder: 18>, <WorkOrder: 19>, <WorkOrder: 20>, <WorkOrder: 21>, <WorkOrder: 42>, <WorkOrder: 43>, <WorkOrder: 23>, '...(remaining elements truncated)...']
>>>

编辑2:工作正常 代码是对的,但当我将最后一个状态更新到列表末尾时,postgre正在移动订单。我解决了在queryset中添加order_by('id')的问题。你知道吗

非常感谢你的帮助!你知道吗


Tags: storenametruedefaultverbosemodelsrequestpage