Я хочу создать регистрационную форму, которая позволяет мне зарегистрироваться. Вместо того чтобы сохранять форму обычно (используя формы 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?
Новые вопросы
django
Django - это серверная платформа веб-приложений с открытым исходным кодом, написанная на Python. Он разработан для сокращения усилий, необходимых для создания сложных веб-сайтов и веб-приложений, управляемых данными, с особым упором на меньшее количество кода, отсутствие избыточности и более явное, чем неявное.