你好吗?首先对不起我的英语不好。你知道吗
我的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')
的问题。你知道吗
非常感谢你的帮助!你知道吗
你的代码似乎是对的。试试这个
相关问题 更多 >
编程相关推荐