Django:'用户'对象不支持索引

时间:2015-11-02 01:07:54

标签: python django django-models django-views

我一直在招致这个问题:

  

'用户'对象不支持索引

自从我从ForeignKey更改为ManyToManyField以获取用户:

user = models.ManyToManyField(User) # Was ForeignKey before

这是我的views.py文件:

if form.is_valid():
    instance = form.save(commit=False)
    instance.user = request.user # The problem I'm guessing
    instance.offered_fund = default_state
    instance.save()

我尝试按照here发现的说明操作,但没有成功。另外我使用Python3,如果这与问题有关。关于如何解决这个问题的任何想法?感谢

2 个答案:

答案 0 :(得分:2)

instance.user = request.user

嗯,用户是ManyToManyField,你不能只是将它分配给模型,因为它是"设置"模特。

你不想这样做吗?

instance.user.add(request.user)

答案 1 :(得分:0)

首先,您需要这行代码才能将用户添加到对象中。

instance.user.add(request.user)

而不是

instance.user = request.user

但是,您还需要运行一些更改以将当前外键用户转换为新的M2M用户数据。

所以我建议先做以下步骤:

1。)建立新的M2M关系并保留现有的外键。

user = models.ForeignKey(User) 
users = models.ManyToManyField(User) 

2.。)立即迁移数据库。

python manage.py makemigrations
python manage.py migrate

3.。)从终端运行以下代码以迁移数据。

for obj in Model.objects.all():
    obj.users.add(obj.user)

4。)删除旧用户字段(如果您愿意,也可以将用户更改为用户,但我建议使用users来反映多个。再次迁移。

5.。)在顶部的代码中进行必要的更改,以添加或处理用户而不是用户。