首页 > 解决方案 > django 不显示值形式 db

问题描述

我有问题。我的模板没有从 db 中显示我的价值。我认为我没有在功能产品的 views.py 中定义模型 UserProduct 。

wievs.py

def index(request):
  context = {
      'products': Product.objects.order_by('category').filter(is_published=True)
  }
  return render(request, 'offers/products.html', context)


def userproduct(request):
   context = {
      'userproduct': UserProduct.objects.filter(user_id=request.user.id),
  }
   return render(request, 'offers/userproducts.html', context)


def product(request, product_id):
   product = get_object_or_404(Product, pk=product_id)

   context = {
      'product': product,
   }
   return render(request, 'offers/product.html', context)

模型.py

class Product(models.Model):
  product_name = models.CharField(max_length=100)
  category = models.CharField(max_length=50)
  weight = models.FloatField()
  description = models.TextField(blank=True)
  photo = models.ImageField(upload_to='photos/%Y/%m/%d/')
  is_published  = models.BooleanField(default=True)
  list_date = models.DateField(default=datetime.now, blank=True)

  def __str__(self):
    return self.product_name

class UserProduct(models.Model):
  user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
  product_name = models.ForeignKey(Product, on_delete=models.CASCADE)
  price = models.FloatField()
  is_published  = models.BooleanField(default=True)
  list_date = models.DateField(default=datetime.now, blank=True)

  def __str__(self):
    return str(self.user.username) if self.user.username else ''

优惠/product.html

<div class="p-4">
              <p class="lead">
                  {% if user.is_authenticated %} 
                <span class="mr-1">
                  <p>Price</p></span>
                  <p class="colores lead font-weight-bold">{{ product.price }} £</p> 
                  {% endif %}
                  <p >Description</p>
                  <p class="colores lead font-weight">{{ product.description }}</p> 
              <p class="colores lead font-weight-bold">Weight: {{ product.weight }}kg</p> </p>
              {% if user.is_authenticated %} 
              <form class="d-flex justify-content-left">
                <!-- Default input -->
                <input type="number" value="1" aria-label="Search" class="form-control" style="width: 100px">
                <button class="btn send-click btn-md my-0 p" type="submit">Add to cart
                  <i class="fas fa-shopping-cart ml-1"></i>
                </button>
              </form>
              {% endif %}
            </div>

价值 product.price 不显示。

这个想法是每个用户都会有不同的产品价格。

标签: pythondjangodjango-modelsdjango-templatesdjango-views

解决方案


那是因为您的Product模型没有price字段;您所拥有的是模型userproduct_set中的反向外键关系UserProduct

price因此,一个 Product实例可能有多个。

您可以使用以下代码显示您的产品的所有可用价格:

<div class="p-4">
  <p class="lead">
    {% if user.is_authenticated %}
      <span class="mr-1">
      <p>Price</p></span>

      {% for userproduct in product.userproduct_set.all %}

        <p class="colores lead font-weight-bold">{{ userproduct.price }} £</p>

      {% endfor %}

    {% endif %}
  <p>Description</p>
  <p class="colores lead font-weight">{{ product.description }}</p>
  <p class="colores lead font-weight-bold">Weight: {{ product.weight }}kg</p> </p>
  {% if user.is_authenticated %}
    <form class="d-flex justify-content-left">
      <!-- Default input -->
      <input type="number" value="1" aria-label="Search" class="form-control" style="width: 100px">
      <button class="btn send-click btn-md my-0 p" type="submit">Add to cart
        <i class="fas fa-shopping-cart ml-1"></i>
      </button>
    </form>
  {% endif %}
</div>

在文档中阅读更多关于它们的信息。

编辑

正如您在评论中提到的那样,您想找出price分配给当前登录用户的用户,如果用户已登录并显示weightdescription即使用户未登录。所以您需要:

def product(request, product_id):
    product = get_object_or_404(Product, pk=product_id)
    user_product = None
    if request.user.is_authenticated:
        user_product = UserProduct.objects.filter(product_name_id=product_id, user=request.user)
        if user_product:
            user_product = user_product.first()

    context = {
      'product': product,
      'user_product': user_product,
    }
    return render(request, 'offers/product.html', context)

以及您的模板:

<div class="p-4">
  <p class="lead">
    {% if user.is_authenticated and user_product %}
      <span class="mr-1">
      <p>Price</p></span>
      <p class="colores lead font-weight-bold">{{ user_product.price }} £</p>
    {% endif %}
  <p>Description</p>
  <p class="colores lead font-weight">{{ product.description }}</p>
  <p class="colores lead font-weight-bold">Weight: {{ product.weight }}kg</p> </p>
  {% if user.is_authenticated and user_product %}
    <form class="d-flex justify-content-left">
      <!-- Default input -->
      <input type="number" value="1" aria-label="Search" class="form-control" style="width: 100px">
      <button class="btn send-click btn-md my-0 p" type="submit">Add to cart
        <i class="fas fa-shopping-cart ml-1"></i>
      </button>
    </form>
  {% endif %}
</div>

推荐阅读