使用重组模板标签按订单对产品列表进行重组

时间:2019-05-23 19:07:55

标签: django

我在使用{%regroup%} Django模板标记时遇到了问题。 简要摘要:我成功列出了所有订单以及在同一模板中订购的产品。所以一切似乎都可以很好地执行以下操作:

  1. 创建订单
  2. 创建订购的产品
  3. 将这些产品添加到订单中
  4. 在dailyorders.html中以相同的模板显示每日订单及其产品(也按日期过滤)

这里是我的代码,只有我将显示代码,该代码使我可以显示订单并在需要时修改订单(我有问题的地方)

型号:


class Productsordered (models.Model):

    item            = models.ForeignKey(Itemlist, on_delete=models.CASCADE)
    order           = models.ForeignKey(Orders, on_delete=models.CASCADE)
    quantity        = models.IntegerField(default=1)

    def __str__(self):
        return f"{self.quant} - {self.item.nombre_producto}"

class Orders(models.Model):

    date           = models.DateField(default=date.today)
    client_name    = models.CharField(max_length=30) (just name, not client id)

    def __str__(self):
          return self.client_name

class Itemlist(models.Model):
    id                = models.SlugField(primary_key = True, max_length =30)
    name_item         = models.CharField(max_length=30)
    price             = models.IntegerField()

每日订单并修改订单视图:

def show_daily_orders(request,**kwargs):
    daily_products_ordered = 
    Productsordered.objects.filter(order__date__day=date.today().day,                                                    
                                   order__date__month=date.today().month,                                                           
                                   order__date__year=date.today().year)

    return render(request,'dailyorders.html',{'daily_products_ordered':daily_products_ordered})

def add_products_ordered (request,pk_order,pk_item):
    products_ordered=Productsordered.objects.filter(order=pk_order)
    get_order=Orders.objects.get(id=pk_pedido)
    list= Itemlist.objects.all()

#ask if the product is already there, if not create one
        try:
            product = products_ordered.get(item=pk_item)
            product.quantity += 1
            product.save()
        except:
            newproduct = Itemlist.objects.get(id=pk_item)
            newproduct = Productsordered.objects.create(item=newproduct, order=get_order)
            product.save()

        return render(request,'modify.html',{'list':list,'products_ordered':products_ordered,'order':order})

dailyorders.html类似于:


{% regroup daily_products_ordered by order as order_list %}

{% for order in order_list %}
<h2> {{order.grouper}}   
   {% for product in order.list  %}
            <li> {{product.quantity}} - {{ product.item.name_item }}</li>
     <a class = 'btn' href="{% url 'go_to_modify_order' pk=order.grouper.id %}">Modify order</a>

   {% endfor %}
{% endfor %}

modify.html

{% for prod in list %}
                      <a class="btn" href="{% url 'go_to_modify_order' pk_item=prod.id pk_order=order.id %}">{{prod.name_item}}</a>

              {% endfor %}

<a class="btn" href="{% url 'go_to_orders' pk_item=prod.id pk_pedido=order.id %}"> Finish modifying order </a>


# Also there would be the choice to delete an added product, but no matter for the problem. 

问题是,当我返回所有订单的模板时,当我尝试修改订单并添加新产品(只需单击按钮并将其添加到购物车)时,重新组合就好像该新产品一样是来自另一个订单。例如:

劳拉( order_id = 1 ):

  • 产品A
  • 产品B

卡洛斯(order_id = 2):

  • 产品X

劳拉( order_id = 1 ):

  • 产品C(这是修改订单时添加的产品!)

为了查看发生了什么,我进入了admin部分,注意到该新产品甚至被添加到我修改的订单中(例如,产品C属于order_id = 1)。因此,当从修改模板传递到每日订单或其他我还没有注意到的问题时,这似乎是一个问题。

我希望在这个主题上有所帮助。

谢谢大家

1 个答案:

答案 0 :(得分:0)

我已经做完了!

似乎重新组合仅在按要重新组合的属性确定字典顺序时才有效!那是因为我要分别获得订单(请参阅示例劳拉(order_id = 1)两次)!请参阅有关重新组合内置模板的django文档