BaseUserManager类的更新方法在哪里?

时间:2018-06-21 17:13:33

标签: django python-3.x django-models django-managers

我有以下创建新用户的类,该用户在kwargs字典中有一个m2m对象,而更新会产生此错误:'SomeUser'对象没有属性'update'。

class SomeUserManager(BaseUserManager):
    def _create_user(self, email, password=None, is_superuser=False, **kwargs):
        if type(kwargs['m2mobject']) is list:
            m2mobject = kwargs['m2mobject'].pop(0)
        user = self.model(email=email, is_superuser=is_superuser, **kwargs)
        if password:
            user.set_password(password)
        user.save()
        user.update(m2mobject=m2mobject)
        return user

    def create_user(self, email, password=None, **kwargs):
        return self._create_user(email, password, is_superuser=False, **kwargs)

    def create_superuser(self, email, password, **kwargs):
        return self._create_user(email, password, is_superuser=True, **kwargs)

我必须从kwargs中删除此m2mobject,以便可以首先创建用户,然后通过此更新方法可以向用户添加m2m对象。 Django为什么不只添加m2mobject,所以我不必从kwargs中删除m2mobject?如果我不这样做,则会出现此错误

Cannot add "m2mobject": instance is on database "None", value is on database "default"

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

update是查询集而不是模型实例的方法。要将对象添加到m2m字段,请在字段本身上使用add方法。

user.m2mobject.add(m2mobject)