Внешний ключ django - отношения с базой данных - PullRequest
0 голосов
/ 14 июля 2020

У меня есть модель Product Perfume, у товара другой объем и цена. Мне нужно отобразить объем и цену для каждого, но я получаю "объект" функция "не имеет атрибута" цены ""

Есть идеи? Я благодарен за любые предложения

Просмотр:

from django.shortcuts import render

from django.views.generic import View, TemplateView
from products.models import Perfume, Pricing



def getIndex(request):
    
    
    perfumes = Perfume.objects.all
    thePrice= perfumes.prices.all()
    
    
   

    return render(request, 'index.html', {'perfumes': perfumes, 'thePrice':thePrice})

Модель

from django.conf import settings
from django.db import models
from django.utils import timezone


class Perfume(models.Model):
  
    genderChoice = (
        ('unisex','unisex'), ('male', 'male'), ('female', 'female'))
         
   
         
    name = models.CharField(max_length=50, default='')
    brand = models.CharField(max_length=40, default='')
    gender = models.CharField(max_length=7, choices=genderChoice, default='unisex')
    

    description = models.TextField()
    image = models.ImageField(upload_to='images/product_image')
    created = models.DateField()
    author =models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    active = models.BooleanField(default=False)
    show_for_consumer = models.BooleanField(default=False)

    def __str__(self):
        return self.name        


class Pricing(models.Model):
    product =models.ForeignKey(Perfume, on_delete=models.CASCADE,related_name='prices')
    
     
    price= models.DecimalField(max_digits=10, decimal_places=2)
    volume= models.DecimalField(max_digits=10, decimal_places=2)
    def __str__(self):
         return 'Perfume {} - Price{} - Volume {}'.format(self.product.name,self.price, self.volume)

1 Ответ

0 голосов
/ 14 июля 2020

Во-первых, вам нужно исправить отсутствующий () при получении набора запросов парфюмерии

perfumes = Perfume.objects.all()

Это thePrice = perfumes.prices.all() неверно. Вы должны сделать это для каждого аромата , а не для queryset духов.

Поскольку Perfume и Pricing имеют отношение «один ко многим», вы можете напрямую доступ к ценам на каждый экземпляр духов. Таким образом, вам нужно только передать духи queryset

def getIndex(request):
    perfumes = Perfume.objects.all()
    return render(request, 'index.html', {'perfumes': perfumes})

Наконец, в своем шаблоне вы можете назвать цены следующим образом:

{% for product in perfumes %}
  ...
  {% for p in product.prices.all %}
    <option>{{p.volume}}ml - {{p.price}}$ </option>
  ...
  {% endfor %}
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...