如何解决基于特殊模型Django的动态查询集
我想要一个包含产品和相关竞争对手产品的页面。我尝试过,但竞争对手的产品始终保持不变。你能帮我吗?
型号:
class Product(models.Model):
created_by = models.ForeignKey(User,on_delete=models.CASCADE)
category = models.CharField(max_length=120)
brand = models.CharField(max_length=120)
product = models.CharField(max_length=120)
price = models.DecimalField(decimal_places=2,max_digits=100)
class Comp_Product(models.Model):
product = models.ForeignKey(Product,on_delete=models.CASCADE)
competitor = models.URLField()
price = models.DecimalField(decimal_places=2,max_digits=100)
change = models.FloatField()
stock = models.BooleanField()
last_update = models.DateField(auto_Now_add=True)
观看次数:
class ProductListView (ListView):
model = Comp_Product
context_object_name = 'comp_products'
template_name = 'products.html'
class ProductDetailView (LoginrequiredMixin,DetailView):
model = Product
template_name = 'product.html'
def get_context_data(self,**kwargs):
context = super().get_context_data(**kwargs)
context['comp_products'] = Comp_Product.objects.all()
return context
urls.py:
path('product/<int:pk>/',ProductDetailView.as_view(),name='product_detail'),path('comp_products/',ProductListView.as_view(),name='comp_products'),
解决方法
这里你说 comp_products = 数据库中的所有 Comp Products。
def get_context_data(self,**kwargs):
context = super().get_context_data(**kwargs)
>>> context['comp_products'] = Comp_Product.objects.all()
return context
您在模板中显示什么?是 {{comp_products}}
还是
{% for pr in product.comp_products.all %}
{{ pr }}
{% endfor %}
为此,您需要在 Comp_Product 模型的产品字段中使用 related_name="products"
,你可能会找到我写的模板:
{%for comp_product in comp_products %}
{{comp_product.competitor}} - {{comp_product.price}} -
{{comp_product.change}} - {{comp_product.stock}} - {{comp_product.last_update}}
{%endfor%}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。