我无法使用邮递员将数据发送到我的表单。它给出了以下错误。
{“user”:[“此字段是必填项。”]}
我正在使用内置的用户模型,并尝试将其与用户信息模型中的自定义字段进行映射。
models.py
class UserInformation(BaseModel):
user = models.OneToOneField(User, related_name='user_id')
first_name = models.CharField(max_length=45)
middle_name = models.CharField(max_length=45, null=True)
last_name = models.CharField(max_length=45)
vendor = models.BooleanField(default=True)
phone = models.CharField(max_length=100, validators=[
RegexValidator(regex=r'^\+?8801?\d{9}$', message="Phone number must be entered in the format: '+8801*********'")
], blank=False, unique=True)
date_of_birth = models.DateField()
confirmation_token = models.CharField(max_length=45, null=True)
confirmation_exp = models.DateTimeField(null=True)
pw_reminder_token = models.CharField(max_length=45, null=True)
pw_reminder_exp = models.DateTimeField(null=True)
profile_pic = models.ImageField(blank=True, null=True, upload_to='profile_images/', default='Images/none/no_images.jpg')
cover_photo = models.ImageField(blank=True, null=True, upload_to='cover_images/', default='Images/none/no_images.jpg')
thumbnail_pic = models.ImageField(blank=True, null=True, upload_to='thumbnail_images/', default='Images/none/no_images.jpg')
phone_verified = models.BooleanField(default=False)
email_verified = models.BooleanField(default=False)
reward_points = models.IntegerField(null=False, default=0)
ref_code = models.CharField(null=True, max_length=10)
def __str__(self):
return self.user.username
def delete(self, *args, **kwargs):
self.user.delete()
super(UserInformation, self).delete(*args, **kwargs)
serializers.py
class UserSerializer(ModelSerializer):
password = serializers.CharField(style={'input_type': 'password'}, write_only=True)
email = serializers.EmailField(validators=[required])
class Meta:
model = User
fields = ['username', 'email', 'password', 'is_active']
extra_kwargs = {'password': {'write_only': True},
}
def validate(self, data):
email = data.get('email', None)
user = User.objects.filter(email=email).distinct()
if user.exists():
raise ValidationError("That email is already registered!")
return data
class UserProfileSerializer(ModelSerializer):
user = UserSerializer(required=True)
profile_pic = serializers.ImageField(use_url=True, required=False)
cover_photo = serializers.ImageField(use_url=True, required=False)
thumbnail_pic = serializers.ImageField(use_url=True, required=False)
class Meta:
model = UserInformation
fields = ['user', 'first_name', 'middle_name', 'last_name', 'profile_pic', 'cover_photo', 'thumbnail_pic',
'vendor', 'phone', 'date_of_birth', 'confirmation_token', 'created_by']
extra_kwargs = {'confirmation_token': {'read_only': True}, 'created_by': {'read_only': True}}
def create(self, validated_data):
user_data = validated_data.pop('user', None)
user = User.objects.create_user(**user_data)
user_object = User.objects.get(pk=user.id)
verification = ''.join(choice(ascii_uppercase) for i in range(5))
return UserInformation.objects.create(user=user, confirmation_token=verification, created_by = user, **validated_data)
views.py
class UserCreateAPIView(ListCreateAPIView):
#permission_classes = [AllowAny]
queryset = UserInformation.objects.all()
serializer_class = UserProfileSerializer
发送以下数据:
username : bob
email : bob@bob.com
first_name : bob
middle_name :
last_name : bob
password : bob
phone : +88017485367475
date_of_birth : 2005-1-1
vendor : True
profile_pic : *picture link*
答案 0 :(得分:0)
正如错误所说,您没有包含用户信息,所以我不确定为什么您对这不起作用感到惊讶。
您已将序列化程序配置为期望包含该信息的user
键,因此您应该以这种方式提供它。
first_name : bob
middle_name :
last_name : bob
phone : +88017485367475
date_of_birth : 2005-1-1
vendor : True
profile_pic : *picture link*
user:
username : bob
email : bob@bob.com
password : bob