Python 如何分配给多个无对象?

Python 如何分配给多个无对象?,python,django,django-models,Python,Django,Django Models,我有一个任务要修改queryset,在a从DB接收到它之后,在上下文之前。 我做下一步: products = list(qs) #create a copy of qs to avoid modifiyng in DB for product in products: access_table = FieldAccess.objects.filter(user=user, product=product.pk).values_list('access', flat=True)

我有一个任务要修改queryset,在a从DB接收到它之后,在上下文之前。 我做下一步:

products = list(qs) #create a copy of qs to avoid modifiyng in DB
for product in products:
    access_table = FieldAccess.objects.filter(user=user, product=product.pk).values_list('access', flat=True)
    fields = [Choices.objects.filter(pk=item).values_list('field_name', flat=True) for item in access_table
              if not access_table[0] == None]
    for field in fields:
        setattr(product, field[0], None)  #assign a new value to particular field of object
return products
除了许多领域外,它运行良好。如果尝试设置“无”值,则会出现错误:

'NoneType' object is not iterable
我必须分配什么

史前史 我需要为特定用户限制模型中特定字段项的值可见性。
我创建了一个中间模型,其中包含对用户、模型对象和应该隐藏的字段的引用。我真的不知道如何通过queryset实现这一点,但我的即时修改代码片段运行良好

重置
ManyToManyField
字段的方法是使用
clear


许多场地在引擎盖下表演一些魔术。您不能简单地分配
None
,因为它需要一个Iterable。您必须将空列表
[]
分配给多个字段,但这实际上执行数据库查询,可能不是您想要的

您可以尝试解决这个问题,但我只需要构建一个字典,其中包含您实际希望传递给模板的信息

products = []
for product in qs:
    access_table = FieldAccess.objects.filter(user=user, product=product.pk).values_list('access', flat=True)
    fields = [Choices.objects.filter(pk=item).values_list('field_name', flat=True) for item in access_table
              if not access_table[0] == None]
    products.append({field[0]: None for field in fields})
return products

您试图在循环中查询数据库的做法可能并不正确。如果你能详细解释你的目标是什么……这实际上修改了DB,这不是作者的意图。请参阅代码中的第一条注释。尽管如此,实际上并不清楚您实际上想要实现什么,但正如@e4c5所评论的,您的方法似乎有问题。也许你可以用更多的上下文来扩展你的问题,我们可以找到一个更好的解决方案。你永远不会在ManyToManyField本身上迭代。您在关系字段上迭代了
.all
.filter
调用。看起来我们都搞错了。至少对于v1.9,分配
[]
相当于
清除
@ps您在这两个帐户上都是正确的。我现在更新我的答案
products = []
for product in qs:
    access_table = FieldAccess.objects.filter(user=user, product=product.pk).values_list('access', flat=True)
    fields = [Choices.objects.filter(pk=item).values_list('field_name', flat=True) for item in access_table
              if not access_table[0] == None]
    products.append({field[0]: None for field in fields})
return products