【问题标题】:Django: showing many to many additional fields in templateDjango:在模板中显示多对多的附加字段
【发布时间】:2017-09-19 01:39:57
【问题描述】:

在尝试显示多对多关系模板的“槽表”的附加字段时,我遇到了以下问题。 我的模型.py:

class Product(models.Model):
  productName =  models.CharField(max_length=500)
  price = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True)
  def __str__(self):
    return self.productName 
  def get_absolute_url(self):
    return reverse('itake:productList')

class Order(models.Model):
   orderID = models.CharField(max_length=100, blank=True, null=True)
   products = models.ManyToManyField(Product,related_name="order_item", through="OrderItem")
   def __str__(self):
      return self.orderID

class OrderItem(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE,null=True)
    order = models.ForeignKey(Order,on_delete=models.CASCADE, null=True)
    orderQuantity = models.IntegerField(default=10)
    def __str__(self):
      return self.order.orderID + '-' +self.product.productName

我的意见.py:

def orderDetails(request,order_id):
    order = get_object_or_404(Order,pk=order_id)
    products = order.products.all()
    context = {'order': order,'products':products}
    return render(request, 'itake/orderDetails.html', context)

我的模板:

 {% for products in products %}
     <p>{{products.productName}} |
        {{products.price}} |
        {{products.orderQuantity}}</p>
  {% endfor %}

但是,它只能列出产品名称和价格,网页中不显示orderQuantity。

【问题讨论】:

    标签: python django django-views many-to-many has-many-through


    【解决方案1】:

    orderQuantityOrderItem 的属性,而不是 Product 的属性。

    试试:

    class OrderItem(models.Model):
        product = models.ForeignKey(Product, on_delete=models.CASCADE,null=True)
        order = models.ForeignKey(Order,on_delete=models.CASCADE, null=True, related_name='items')
        orderQuantity = models.IntegerField(default=10)
        def __str__(self):
          return self.order.orderID + '-' +self.product.productName
    

    在模板中:

    {% for item in order.items %}
    <p>
        {{ item.product.productName }} |
        {{ item.product.price }} |
        {{ item.orderQuantity }} 
    </p>
    {% endfor %}
    

    也许您想更改模型的models.CASCADE,因为如果订单被删除,这将导致产品删除。

    【讨论】:

      猜你喜欢
      • 2012-03-29
      • 2021-06-01
      • 2014-07-28
      • 2011-04-14
      • 2011-03-25
      • 2014-01-25
      • 2021-06-20
      • 2012-03-25
      • 2011-05-25
      相关资源
      最近更新 更多