因此,我试图显示一个表中没有出现在另一个表中的项目的列表。但是我不断收到错误消息,例如“无法解压不可迭代的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
将包含一个查询集,其中包含Item
与User
in有关的所有对象user_obj
。
items
将包含一个包含所有Item
对象的查询集,但不包括与User
in有关的对象user_obj
您收到错误是因为filter()
需要模型中的字段:
filter(user='some user')
有关如何进行查询的更多信息,请参阅文档
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句