django - Django - 无法解压不可迭代的 ManyRelatedManager 对象
问题描述
所以我试图显示一个表中没有出现在另一个表中的项目列表。但我不断收到诸如“无法解压缩不可迭代的 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()
项目.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
将包含一个查询集,其中包含与inItem
相关的所有对象。User
user_obj
items
将包含一个包含所有Item
对象的查询集,不包括User
与in相关的对象user_obj
您收到错误是因为filter()
需要模型中的字段:
filter(user='some user')
可以在文档中阅读有关如何进行查询的更多信息
推荐阅读
- python - 将 numpy 数组转换为 html img 标签的 src 可读的字节串
- django - 允许将 django 模型字段修改为某些用户
- javascript - 有没有办法通过 ReactJs 中的动态操作调用来更新 props 变量?
- python-3.x - 带有列表的 Python 平分行为
- c++ - c++ 方法从另一个模板类和命名空间泄漏
- python - findAndModify 不使用索引搜索
- swift - CustomVideoCompositorClass - 绘制时出现 CGContext 错误(CGImage,CGRect)
- laravel - Laravel:选择一对多关系中的第一条记录
- rest - 在 Qlik Sense 中与 Service Now 的动态 REST 连接
- android - 更新到最近的库后,Firebase 移动身份验证无法在发布模式下工作