У меня есть две модели, связанные друг с другом, и я хочу автоматически создавать данные в ModelB после создания данных в ModelA.
У меня есть эта User
Модель, которая пришла от пользователя Django Admin
class NewUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(_('email address'), unique=True)
user_name = models.CharField(max_length=150, unique=True)
first_name = models.CharField(max_length=150)
start_date = models.DateTimeField(default=timezone.now)
is_staff = models.BooleanField(default=True)
is_superuser = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
objects = CustomAccountManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['user_name', 'first_name']
def __str__(self):
return str(self.id) + " " + self.email
И у меня есть другая модель, связанная с этой User
моделью, называемая Promoter
моделью
class Promoter(models.Model):
user = models.ForeignKey(
NewUser,
on_delete=models.CASCADE,
)
def __str__(self):
return str(self.user.id) + " " + self.user.email
def email(self):
return self.user.email
И каждый раз, когда я добавляю данные в User, я хочу автоматически добавлять также данные в модель Promoter
со ссылкой на вновь созданную User
Вот мой код для добавления/регистрации нового пользователя
class RegisterView(APIView):
permission_classes = [AllowAny]
def post(self, request):
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
newuser = serializer.save()
if newuser:
return Response(status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Я пытаюсь вручную добавить только что созданный User
во фронт-энд, используя два разных вызова API для добавления пользователя и добавления промоутера, но получаю ошибку при добавлении данных промоутера вручную (1048, "Column 'user_id' cannot be null")
Я также пытаюсь добавить данные с помощью postman
Ошибка для поля user
, сохраненного без добавления пользовательского объекта внешнего ключа
вы можете передать объект пользователя в метод save() следующим образом...
def post(self, request):
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
newuser = serializer.save(user=request.user)