Прямое назначение передней стороне множества «многие ко многим» запрещено.Вместо этого используйте groups.set (). Django-Rest-Framework - PullRequest
0 голосов
/ 22 марта 2019

Я хочу добавить пользователя, и я использую сериализатор модели django rest api для добавления пользователя, но когда я добавляю его, он дает мне:

Прямое назначение передней стороне много-Много множества запрещено.Вместо этого используйте user_permissions.set ().

                              OR

Прямое назначение передней стороне множества «многие ко многим» запрещено.Вместо этого используйте groups.set ().

Я использую менеджер django AbstractBaseUser и использовал APIView и modelserializer.

Вот мои данные ниже:

Models.py:

class UserManager(BaseUserManager):

def create_user(self,email,password):
    user=self.model(email=email)
    user.password=password
    user.set_password(user.password)
    user.save()

def create_staffuser(self,email,password):
    user = self.model(email=email)
    user.password=password
    user.set_password(user.password)
    # user.is_admin = True
    user.is_superuser = False
    user.is_staff = True
    user.is_active = True
    user.save()


def create_superuser(self,email,password):
    user=self.model(email=email)
    #user.password=password
    user.set_password(password)
    user.is_staff=True
    user.is_superuser=True
    user.save()


class User(AbstractBaseUser,PermissionsMixin):

user_image = models.CharField(max_length=100,default="new image")
# is_admin=models.BooleanField(default=False)
email = models.EmailField(unique=True)
is_staff = models.BooleanField(default=False)
first_name = models.CharField(max_length=30, blank=True)
last_name = models.CharField(max_length=30, blank=True)
date_joined = models.DateTimeField(null=True, blank=True)
username = models.CharField(

    max_length=150,
    unique=True,
    null=True,

)
is_active = models.BooleanField(default=True)
object = UserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []

objects = models.Manager()

def get_short_name(self):
    return self.email

Serializer.py

class UserSerializer(serializers.ModelSerializer):

class Meta:
    model=User
    fields='__all__'

    def create(self,validated_data):
        user=User.objects.create(**validated_data)
        return user

    def update(self,instance,validated_data):

        for k,v in validated_data.items():
            setattr(instance,k,v)
            instance.save()
        return instance

Views.py

class CreateUser(APIView):  #  registering user on our site

def get(self,request):
    return Response([UserCreateSerializer(user).data for user in User.objects.all()])

def post(self,request):
    payload=request.data
    serializer=UserCreateSerializer(data=payload)

    if serializer.is_valid():
        serializer.save()
        return Response(serializer.data,status=status.HTTP_201_CREATED)
    return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)

Я искал, и я думаю, что проблема заключается в user = User.objects.create (** validated_data) в классе сериализатора, я пытался использовать user.groups.set () или user.user_permission для установки, но получал ту же ошибкунаправь меня к этому решению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...