Skip to main content
 首页 » 编程设计

python之Django 模板不显示我的所有参数

2024年09月03日34duanxz

我有问题。我想在模型 Django 中创建关系。我希望每个用户都有不同的产品价格。产品必须分配给用户。肯定是登录后才显示,可惜模板没有显示所有参数。

offers/models.py

class Product(models.Model): 
  title = 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.title 
 
class UserProduct(models.Model): 
  user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) 
  title = models.ForeignKey(Product, on_delete=models.DO_NOTHING) 
  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 '' 

产品将为登录用户显示。

offers/views.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), 
      'userproduct1': Product.objects.all() 
  } 
   return render(request, 'offers/userproducts.html', context) 

我的模板只显示标题和价格。

offers/userproducts.html

<!-- Offers --> 
        <section class="text-center mb-4 py-4"> 
          <div class="container"> 
            <div class="row"> 
                {% if user.is_authenticated %} 
                {% if userproduct %} 
                {% for product in userproduct %} 
 
            <!--Grid column--> 
            <div class="col-lg-3 col-md-6 mb-4"> 
              <div class="card"> 
                <div class="view overlay"> 
                  <img src="{{ product.photo.url }}" class="card-img-top" alt=""> 
                  <a href="{% url 'product' product.id %}"> 
                    <div class="mask rgba-white-slight"></div> 
                  </a> 
                </div> 
                <div class="card-body text-center"> 
                    <h6 class="grey-text">{{ product.category }}</h6> 
                  <h5> 
                    <strong> 
                      <a href="{% url 'product' product.id %}" class="dark-grey-text">{{ product.title }}</a> 
                    </strong> 
                  </h5> 
                  <h4 class="font-weight-bold colores"> 
                    <strong>{{ product.price }}</strong> 
                  </h4> 
                </div> 
              </div> 
            </div> 
            <!--Grid column--> 
 
            {% endfor %} 
            {% else %} 
              <div class="col-sm-12 sm-12"> 
                <p>No Products Available XD</p> 
              </div> 
            {% endif %} 
            {% endif %} 
 
          </div> 
        </div> 
        </section> 

请您参考如下方法:

您正在迭代的 userproduct 查询集属于 UserProduct 模型,该模型没有您要查找的字段。

它应该是这样的:

<!-- Offers --> 
    <section class="text-center mb-4 py-4"> 
      <div class="container"> 
        <div class="row"> 
            {% if user.is_authenticated %} 
            {% if userproduct %} 
            {% for product in userproduct %} 
 
        <!--Grid column--> 
        <div class="col-lg-3 col-md-6 mb-4"> 
          <div class="card"> 
            <div class="view overlay"> 
              <img src="{{ product.title.photo.url }}" class="card-img-top" alt=""> 
              <a href="{% url 'product' product.title.id %}"> 
                <div class="mask rgba-white-slight"></div> 
              </a> 
            </div> 
            <div class="card-body text-center"> 
                <h6 class="grey-text">{{ product.title.category }}</h6> 
              <h5> 
                <strong> 
                  <a href="{% url 'product' product.title.id %}" class="dark-grey-text">{{ product.title.title }}</a> 
                </strong> 
              </h5> 
              <h4 class="font-weight-bold colores"> 
                <strong>{{ product.price }}</strong> 
              </h4> 
            </div> 
          </div> 
        </div> 
        <!--Grid column--> 
 
        {% endfor %} 
        {% else %} 
          <div class="col-sm-12 sm-12"> 
            <p>No Products Available XD</p> 
          </div> 
        {% endif %} 
        {% endif %} 
 
      </div> 
    </div> 
    </section> 

如果您需要来自 Product 模型的字段,您应该获取 Product 实例,即 title。所以:

  • 价格:product.price

  • 标题:product.title.title(product.title 也适用,因为您的 __str__ 函数。)

  • 类别:product.title.category

  • 照片:product.title.photo

  • 等等...