Python 如何从物品的外键中获取标题
当我将产品添加到wishlist时,我试图从项目模型中获取标题Python 如何从物品的外键中获取标题,python,django,Python,Django,当我将产品添加到wishlist时,我试图从项目模型中获取标题 class Item(models.Model): title = models.CharField(max_length=250) def __str__(self): return self.title class Wishlist(models.Model): user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE) it
class Item(models.Model):
title = models.CharField(max_length=250)
def __str__(self):
return self.title
class Wishlist(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
item = models.ForeignKey(Item, on_delete=models.CASCADE)
added_date = models.DateTimeField(auto_now_add=True)
class Meta:
db_table = 'Wishlist'
verbose_name_plural = 'Wishlists'
def __str__(self):
return self.item.title
@login_required
def wishlist(request):
wishlist = Wishlist.objects.all()
context = {
'wishlist': wishlist,
}
return render(request,'wishlist.html', context)
我尝试了这个模板,但没有工作
{% for object in wishlist.item.all %}
<h1>{{ object.item.title }}</h1>
{% endfor %}
{%用于wishlist.item.all%中的对象]
{{object.item.title}
{%endfor%}
由于愿望列表
是愿望列表
的集合,因此您应该像这样迭代:
{% for object in wishlist %}
<h1>{{ object.item.title }}</h1>
{% endfor %}
{%for wishlist%中的对象}
{{object.item.title}
{%endfor%}
话虽如此,在
项目
和愿望列表
之间定义多对多关系可能更有意义,因为愿望列表
是愿望列表
的集合,您应该像这样迭代:
{% for object in wishlist %}
<h1>{{ object.item.title }}</h1>
{% endfor %}
{%for wishlist%中的对象}
{{object.item.title}
{%endfor%}
也就是说,在
项目
和愿望列表
之间定义多对多关系可能更有意义。我将Foreignkey更改为多对多关系,当我将产品添加到愿望列表时,我得到了这个结果。“禁止直接分配到多对多集合的前端。请改用item.set()。”如何解决此问题?@Hi3e:正如错误所述,保存Wishlist
,然后使用Wishlist.item.add(my_item)
。但是,我建议您首先查看文档,看看它是否符合您的需要:def add_to_wishlist(request,slug):item=get_object_或_404(item,slug=slug)wish_item,created=wishlist.objects.get_或_create(item=item,user=request.user,)wish_item.item.add(wish_item)wish_item.save()messages.info(请求,“项目已添加到您的愿望列表”)返回重定向(“shop:wishlist”)这显示“禁止直接分配到多对多集合的前端。改为使用item.set()。”从获取或创建(…)
中删除项目=项目,并替换希望的项目.item.add(希望的项目)
带有所希望的\u item.item.add(item)
。您是对的!但是模板还有一个问题。这是行不通的。{%for wishlist%}{{object.item.title}{%endfor%}我将Foreignkey更改为ManyToMany关系,当我向wishlist添加一个产品时,我得到了这个结果。“禁止直接分配到多对多集合的前端。请改用item.set()。”如何解决此问题?@Hi3e:正如错误所述,保存Wishlist
,然后使用Wishlist.item.add(my_item)
。但是,我建议您首先查看文档,看看它是否符合您的需要:def add_to_wishlist(request,slug):item=get_object_或_404(item,slug=slug)wish_item,created=wishlist.objects.get_或_create(item=item,user=request.user,)wish_item.item.add(wish_item)wish_item.save()messages.info(请求,“项目已添加到您的愿望列表”)返回重定向(“shop:wishlist”)这显示“禁止直接分配到多对多集合的前端。改为使用item.set()。”从获取或创建(…)
中删除项目=项目,并替换希望的项目.item.add(希望的项目)
带有所希望的\u item.item.add(item)
。您是对的!但是模板还有一个问题。这是行不通的。{%for wishlist%}{{object.item.title}}{%endfor%}