gpt4 book ai didi

Django - 无法解压不可迭代的 ManyRelatedManager 对象

转载 作者:行者123 更新时间:2023-12-05 01:15:25 28 4
gpt4 key购买 nike

所以我试图显示一个表中没有出现在另一个表中的项目列表。但是我不断收到诸如“无法解压不可迭代的 ManyRelatedManager 对象”之类的错误

我已经尝试了 django 过滤器和排除的多种变体,但总是存在上述错误或取决于我尝试过的其他事情:用户对象没有属性配置文件或者无法解压不可迭代的 int 对象

模型:

class Item(models.Model):
item_name = models.CharField(max_length=200)
def __str__(self):
return self.item_name
class Meta:
verbose_name = "Item"
verbose_name_plural = "Items"



class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="user")
items = models.ManyToManyField(Item)

class Meta:
verbose_name = "Profile"
verbose_name_plural = "Profiles"

观点:

python
@login_required
def item_view(request):
if request.method == 'GET':
user_obj = request.user.user
items = Item.objects.filter(user_obj.items)
context_dict = {'items': items}
return render(request, 'site/items.html', context_dict)
else:
return HttpResponseNotFound()

items.html:

{% for i in items%}
<li><input type="checkbox" data-pk="{{i.pk}}" name="{{i.item_name}}" value="{{i.pk}}" onchange="processChange(this)"> {{i.item_name}}<br>
</li>
{% endfor %}

目标是让 items.html 显示所有不在用户配置文件中的项目。我似乎尝试的一切似乎都不起作用,因此非常感谢任何帮助。

最佳答案

替换:

items = Item.objects.filter(user_obj.items)

与:

user_items = Items.objects.filter(profile=user_obj)
items = Items.objects.exclude(pk__in=user_items)

user_items 将包含一个查询集,其中包含与 user_obj 中的 User 相关的所有 Item 对象。

items 将包含一个包含所有 Item 对象的查询集,排除User 相关的对象在 user_obj

您收到错误是因为 filter() 需要来自模型的字段:

  • filter(user='some user')

更多关于如何进行查询的信息可以在 docs 中阅读。

关于Django - 无法解压不可迭代的 ManyRelatedManager 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56244568/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com