2017-04-21 1 views
0

J'ai les problèmes suivants lorsque j'essaie d'afficher le champ supplémentaire de la table 'auge' d'un modèle de relation many-to-many. mon model.py:Django: affichage de plusieurs champs supplémentaires dans le modèle

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 

mon views.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) 

mes modèles:

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

Cependant, il ne peut indiquer le nom du produit et le prix, le OrderQuantity est pas montré dans la page Web.

Répondre

1

orderQuantity est une propriété de OrderItem, pas de Product.

Essayez:

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 

Et dans le modèle:

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

Et vous voulez peut-être changer le models.CASCADE du modèle, car cela entraînera la suppression du produit si l'ordre est supprimé .