Python 如何从新视图访问其他模型字段
我正试图建立一个愿望清单,我有一个清单模型和一个愿望清单模型, 我成功地使它工作了,但 我必须首先循环所有列表,并与我的愿望列表中的产品id匹配,以便我可以访问诸如标题和图像之类的字段 有没有比在所有列表上循环直到找到匹配的列表更简单的方法呢 views.pyPython 如何从新视图访问其他模型字段,python,django,django-models,django-views,django-templates,Python,Django,Django Models,Django Views,Django Templates,我正试图建立一个愿望清单,我有一个清单模型和一个愿望清单模型, 我成功地使它工作了,但 我必须首先循环所有列表,并与我的愿望列表中的产品id匹配,以便我可以访问诸如标题和图像之类的字段 有没有比在所有列表上循环直到找到匹配的列表更简单的方法呢 views.py def add_to_wishlist(request, product_id): product = WishList.objects.filter(listing_id=product_id, user=request.use
def add_to_wishlist(request, product_id):
product = WishList.objects.filter(listing_id=product_id, user=request.user.username)
if product:
product.delete()
else:
product = WishList()
product.listing_id = product_id
product.user = request.user.username
product.save()
return HttpResponseRedirect(request.META['HTTP_REFERER'])
def wishlist(request):
product = WishList.objects.filter(user=request.user)
all_listings = AuctionListing.objects.all()
return render(request, "auctions/wishlist.html", {
'wishlist': product,
'all_listings': all_listings
})
models.py
class AuctionListing(models.Model):
title = models.CharField(max_length=100)
description = models.TextField()
start_bid = models.IntegerField(null=True)
image = models.CharField(max_length=1000, blank=True)
category = models.CharField(max_length=100)
seller = models.CharField(max_length=100, default="Default_Value")
class WishList(models.Model):
user = models.CharField(max_length=64)
listing_id = models.IntegerField()
wishlist.html
{% extends "auctions/layout.html" %}
{% block title %}Users Wishlist {% endblock %}
{% block body %}
<div class="col-12 mx-auto">
<h1 class="h3">My Wishlist</h1>
<div>Manage your wishlist</div>
{% if wishlist %}
{% for listing in all_listings %}
{% for product in wishlist %}
{% if listing.id == product.listing_id%}
<div class="card-mb-3">
<div class="row g-0">
<div class="col-md-4">
<img src="{{ listing.image }}" class="img-responsive" >
</div>
<div class="col-md-8">
<div class="card-body">
<h5 class="card-title">{{listing.title}}</h5>
<p class="card-text"> {{listing.description}}</p>
<p class="card-text"><small class="text-muted">{{listing.start_bid}}</small></p>
</div>
</div>
</div>
</div>
{% endif %}
{% endfor %}
{% endfor %}
{% else %}
<p class="card-text">No products have been added to your wishlist yet</p>
{% endif %}
</div>
{% endblock %}
{%extensed“auctions/layout.html”%}
{%block title%}用户希望列表{%endblock%}
{%block body%}
我的愿望清单
管理你的愿望清单
{%if wishlist%}
{%用于在所有_列表中列出%}
{wishlist%中的产品为%1}
{%if listing.id==product.listing\u id%}
{{listing.title}
{{listing.description}
{{listing.start\u bid}
{%endif%}
{%endfor%}
{%endfor%}
{%else%}
您的愿望列表中尚未添加任何产品
{%endif%}
{%endblock%}
因为您将为用户获取所有愿望列表
对象,所以您不需要收集所有拍卖列表
对象并对其进行迭代。您可以使用返回的WishLists
上的ID查询它们
我会这样做
views.py
def wishlist(request):
wishlists = WishList.objects.filter(user=request.user)
listing_ids = wishlists.values_list('listing_id', flat=True)
listings = AuctionListing.objects.filter(pk__in=listing_ids)
return render(request, "auctions/wishlist.html", {
'wishlists': wishlists,
'listings': listings
})
wishlist.html
{% extends "auctions/layout.html" %}
{% block title %}Users Wishlist {% endblock %}
{% block body %}
<div class="col-12 mx-auto">
<h1 class="h3">My Wishlist</h1>
<div>Manage your wishlist</div>
{% if wishlists and listings %}
{% for listing in listings %}
<div class="card-mb-3">
<div class="row g-0">
<div class="col-md-4">
<img src="{{ listing.image }}" class="img-responsive" >
</div>
<div class="col-md-8">
<div class="card-body">
<h5 class="card-title">{{listing.title}}</h5>
<p class="card-text"> {{listing.description}}</p>
<p class="card-text"><small class="text-muted">{{listing.start_bid}}</small></p>
</div>
</div>
</div>
</div>
{% endfor %}
{% else %}
<p class="card-text">No products have been added to your wishlist yet</p>
{% endif %}
</div>
{% endblock %}
{%extensed“auctions/layout.html”%}
{%block title%}用户希望列表{%endblock%}
{%block body%}
我的愿望清单
管理你的愿望清单
{%if-wishlists and listings%}
{%用于在清单%中列出}
{{listing.title}
{{listing.description}
{{listing.start\u bid}
{%endfor%}
{%else%}
您的愿望列表中尚未添加任何产品
{%endif%}
{%endblock%}
因为您将为用户获取所有愿望列表
对象,所以您不需要收集所有拍卖列表
对象并对其进行迭代。您可以使用返回的WishLists
上的ID查询它们
我会这样做
views.py
def wishlist(request):
wishlists = WishList.objects.filter(user=request.user)
listing_ids = wishlists.values_list('listing_id', flat=True)
listings = AuctionListing.objects.filter(pk__in=listing_ids)
return render(request, "auctions/wishlist.html", {
'wishlists': wishlists,
'listings': listings
})
wishlist.html
{% extends "auctions/layout.html" %}
{% block title %}Users Wishlist {% endblock %}
{% block body %}
<div class="col-12 mx-auto">
<h1 class="h3">My Wishlist</h1>
<div>Manage your wishlist</div>
{% if wishlists and listings %}
{% for listing in listings %}
<div class="card-mb-3">
<div class="row g-0">
<div class="col-md-4">
<img src="{{ listing.image }}" class="img-responsive" >
</div>
<div class="col-md-8">
<div class="card-body">
<h5 class="card-title">{{listing.title}}</h5>
<p class="card-text"> {{listing.description}}</p>
<p class="card-text"><small class="text-muted">{{listing.start_bid}}</small></p>
</div>
</div>
</div>
</div>
{% endfor %}
{% else %}
<p class="card-text">No products have been added to your wishlist yet</p>
{% endif %}
</div>
{% endblock %}
{%extensed“auctions/layout.html”%}
{%block title%}用户希望列表{%endblock%}
{%block body%}
我的愿望清单
管理你的愿望清单
{%if-wishlists and listings%}
{%用于在清单%中列出}
{{listing.title}
{{listing.description}
{{listing.start\u bid}
{%endfor%}
{%else%}
您的愿望列表中尚未添加任何产品
{%endif%}
{%endblock%}
好的,你可以通过列出id和/或类似标题的方式进行搜索,你可以用模型进行筛选吗?理想情况下,你可以处理这两件事之间的一些关系。可能是一个manytomy
,这样产品/物品就可以出现在人们的愿望清单上。这样可以更容易地显示相关数据。因为现在它看起来像是一个愿望列表
可以存储一个数字,希望它是AuctionListing
对象的ID,但是你必须维护这个链接并对它进行所有的健全性检查。这也意味着愿望列表只能包含1项。我已按列表id进行筛选,但如何使用我的愿望列表列表id访问AuctionListings模型字段,你可以通过列出你的id和/或类似标题的东西来搜索你的模型吗?理想情况下,你可以处理这两件事之间的一些关系。可能是一个manytomy
,这样产品/物品就可以出现在人们的愿望清单上。这样可以更容易地显示相关数据。因为现在它看起来像是一个愿望列表
可以存储一个数字,希望它是AuctionListing
对象的ID,但是你必须维护这个链接并对它进行所有的健全性检查。这也意味着愿望列表只能包含1项。我已经按列表id进行了筛选,但如何使用我的愿望列表id访问AuctionListings模型字段?啊..我明白了..这很有效,我在值列表列表中添加了对象列表id=wishlist.objects.values列表('listing_id',flat=True)非常感谢!啊..我明白了..这起作用了,我已经在值列表中添加了对象,列表中列出了\u id=WishList.objects.values\u list('listing\u id',flat=True)非常感谢!