Я хочу создать регистрационную форму, которая позволяет мне зарегистрироваться. Вместо того чтобы сохранять форму обычно (используя формы Django), я создал API, который получает все данные из формы и сохраняет их в модели. Я пробовал этот метод, но я не получаю никаких результатов:

< Сильный > models.py :

from django.contrib.auth.models import User

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete = models.CASCADE, primary_key=True, related_name = 'profile')
    address = models.TextField()
    phoneno = models.IntegerField()

< Сильный > views.py :

def signup(request):
    if request.method == 'POST':
        user_form = UserForm(request.POST)
        register_form = RegisterForm(request.POST)
        if user_form.is_valid() and register_form.is_valid():
            username = request.POST.get("username", ""),
            first_name = request.POST.get("first_name",""),
            last_name=request.POST.get("last_name",""),
            email=request.POST.get("email",""),
            password=request.POST.get("password2",""),
            address=request.POST.get("address",""),
            phoneno=request.POST.get("phoneno","")
            payload = { 'username': username,
                        'first_name': first_name,
                        'last_name': last_name, 
                        'email':email,
                        'password':password,
                        "profile" : {
                            'address': address,
                            'phoneno': phoneno,
                        }
            }
            response = requests.post('http://127.0.0.1:8000/sign_api/',data=payload)
            serializer = UserSerializer(data=payload)
            if serializer.is_valid():
                serializer.save()
            return redirect("login")
    else:
        user_form = UserForm()
        register_form = RegisterForm()
    return render(request, 'users/register.html', {'user_form': user_form, 'register_form': register_form})


class RAPI(APIView):
    permission_classes = [AllowAny]
    def post(self, request, format=None):
        serializer = UserSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            content = {'status': 'You are registered'}
            return Response(content, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

< Сильный > serializers.py :

class RegisterSerializer(serializers.ModelSerializer):
    class Meta:
        model = Profile
        fields = ('address','phoneno','department', 'salary')

class UserSerializer(serializers.ModelSerializer):
    profile = RegisterSerializer()

    class Meta:
        model = User
        fields = ('username','first_name','last_name','email', 'password', 'register')

    def create(self, request, validated_data, *args, **kwargs):
        profile_data = validated_data.pop('profile')
        password = validated_data.pop('password', None)  
        user = User.objects.create(**validated_data)
        if password is not None:
            user.set_password(password)
        user.save() 
        Register.objects.create(user = user, **register_data) 
        return validated_data

< Сильный > forms.py :

class UserForm(UserCreationForm):
    first_name = forms.CharField(max_length=30, required=False)
    last_name = forms.CharField(max_length=30, required=False)
    email = forms.EmailField(max_length=254)

    class Meta:
        model = User
        fields = ['username', 'first_name', 'last_name', 'email', 'password1', 'password2']

class RegisterForm(forms.ModelForm): 
    class Meta:
        model = Profile
        fields = ['address','phoneno','department', 'salary']

После отправки данных в мою регистрационную форму я получаю эту ошибку:

{"profile" : ["this field is required"]}

Как я могу отправить данные формы моим сериализаторам с помощью модуля запросов в Python?

0
danny_boy