我正在开发一个 Django 项目,其中有一个
Vendor
模型。目标是在个人资料页面上显示供应商的个人资料,包括其联系信息和描述。但是,联系人和描述字段未显示在模板中。
这是我的 Vendor
模型定义:
class Vendor(models.Model):
vid=ShortUUIDField(length=10,max_length=100,prefix="ven",alphabet="abcdef")
title=models.CharField(max_length=100,default="Nest")
image=models.ImageField(upload_to=user_directory_path,default="vendor.jpg")
cover_image=models.ImageField(upload_to=user_directory_path,default="vendor.jpg")
description=RichTextUploadingField(null=True, blank=True,default="Normal Vendorco")
address=models.CharField(max_length=100, default="6,Dum Dum Road")
contact=models.CharField(max_length=100, default="+91")
chat_resp_time=models.CharField(max_length=100,default="100")
shipping_on_time=models.CharField(max_length=100,default="100")
authenticate_rating=models.CharField(max_length=100,default="100")
days_return=models.CharField(max_length=100,default="100")
warranty_period=models.CharField(max_length=100,default="100")
user=models.ForeignKey(CustomUser, on_delete=models.SET_NULL ,null=True)
class Meta:
verbose_name_plural="Vendors"
def Vendor_image(self):
return mark_safe('<img src="%s" width="50" height="50"/>'%(self.image.url))
def __str__(self):
return self.title
这是检索
vendor
配置文件的视图函数:
def shop_page(request):
products = Vendor.objects.all()
revenue = CartOrder.objects.aggregate(price=Sum("price"))["price"]
total_sales = CartOrderItems.objects.filter(order__paid_status=True).aggregate(qty=Sum("qty"))["qty"]
context = {
"products": products,
"revenue": revenue,
"total_sales": total_sales,
}
return render(request, "useradmin/shop_page.html", context)
这是模板
shop_page
.html:
{% load static %}
{% block content %}
<style>
body, html {
height: 100%;
margin: 0;
}
.container-fluid {
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
}
.profile-card {
border-radius: 12px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
background: #ffffff;
overflow: hidden;
}
.card-header {
background-color: #007bff;
color: #fff;
padding: 20px;
border-bottom: none;
}
.card-title {
font-size: 2rem;
font-weight: 700;
margin: 0;
}
.card-body {
padding: 30px;
}
.profile-image {
max-width: 200px;
height: auto;
border-radius: 50%;
border: 2px solid #dee2e6;
margin-bottom: 20px;
}
.card-footer {
background-color: #f8f9fa;
padding: 15px;
}
.btn-primary {
background-color: #007bff;
border-color: #007bff;
font-size: 1rem;
padding: 10px 20px;
border-radius: 50px;
transition: background-color 0.3s, border-color 0.3s;
}
.btn-primary:hover {
background-color: #0056b3;
border-color: #0056b3;
}
@media (max-width: 768px) {
.profile-card {
text-align: center;
}
.profile-image {
margin: 0 auto 20px;
}
.card-body .row {
display: flex;
flex-direction: column;
align-items: center;
}
.card-body .col-md-8 {
margin-top: 20px;
}
}
</style>
<div class="container-fluid d-flex justify-content-center align-items-center vh-100">
<div class="card profile-card w-75">
<div class="card-header">
<h2 class="card-title">Vendor Profile</h2>
</div>
<div class="card-body">
<div class="row">
<div class="col-md-4 text-center">
<img src="{{ request.user.profile.image.url }}" alt="{{ vendor.name }}" class="profile-image img-thumbnail">
</div>
<div class="col-md-8">
<h3>{{ Vendor.title }}</h3>
<p><strong>Email:</strong> {{ request.user.email }}</p>
<p><strong>Phone:</strong> {{ vendor.contact }}</p>
<p><strong>Address:</strong> {{ request.user.address }}</p>
<p><strong>Description:</strong> {{ request.user.description }}</p>
<p><strong>Total Sales:</strong> Hi</p>
</div>
</div>
</div>
<div class="card-footer text-right">
<a href="#" class="btn btn-primary">Edit Profile</a>
</div>
</div>
</div>
{% endblock content %}
请帮我解决这个问题...
当您渲染产品查询集时,请使用for循环来访问联系人、描述和其他必填字段。更新您的代码如下:
{% load static %}
{% block content %}
<style>
/* Styles omitted for brevity */
</style>
<div class="container-fluid d-flex justify-content-center align-items-center vh-100">
{% for vendor in products %}
<div class="card profile-card w-75 mb-4">
<div class="card-header">
<h2 class="card-title">Vendor Profile</h2>
</div>
<div class="card-body">
<div class="row">
<div class="col-md-4 text-center">
<img src="{{ vendor.image.url }}" alt="{{ vendor.title }}" class="profile-image img-thumbnail">
</div>
<div class="col-md-8">
<h3>{{ vendor.title }}</h3>
<p><strong>Email:</strong> {{ request.user.email }}</p>
<p><strong>Phone:</strong> {{ vendor.contact }}</p>
<p><strong>Address:</strong> {{ vendor.address }}</p>
<p><strong>Description:</strong> {{ vendor.description }}</p>
</div>
</div>
</div>
<div class="card-footer text-right">
<a href="#" class="btn btn-primary">Edit Profile</a>
</div>
</div>
{% endfor %}
</div>
{% endblock content %}