这是一个Django + API应用程序,其中Django是ReactJS后端,ReactJS是前端。
在注册表单中,当用户尝试注册帐户时,它会返回一个错误
ValueError: Cannot assign "['Sports', 'Health']": "Consumer.interests" must be a "Interests" instance.不幸的是,SOF的答案并没有帮助解决这个问题,所以我请求您的帮助。
注册API
class RegistrationAPI(generics.GenericAPIView):
serializer_class = RegisterSerializer
def post(self, request, *args, **kwargs):
print("Request: ", request.data)
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.save()
print(request.data.get('is_consumer'))
if request.data.get('is_consumer') == 'True':
consumer_data = request.data.get('additional')
interest_data = consumer_data.get('interests')
#interest_data = consumer_data.getlist('interests')
print("the data is ", interest_data)
dob_values = consumer_data.get("dob")
dob = get_dob(dob_values)
age = get_age(dob_values)
gender = consumer_data.get("gender")
Consumer.objects.create(
user=user, interests=interest_data, dob=dob, age=age, gender=gender)
User.objects.filter(pk=user.pk).update(is_consumer=True)
elif request.data.get('is_business') == 'True':
Business.objects.create(
user=user, **request.data.get('additional'))
User.objects.filter(pk=user.pk).update(is_business=True)
# if serializer.is_valid():
# user = send_verification_email(request, serializer)
# email sending for confirmation
email_subject = 'Activate your account'
email_body = 's'
send_mail(
email_subject,
email_body,
settings.DEFAULT_FROM_EMAIL,
{user.email,},
)
return Response({"user": UserSerializer(user, context=self.get_serializer_context()).data, "token": AuthToken.objects.create(user)[1]})注册序列化程序
class RegisterSerializer(serializers.ModelSerializer):
user = UserSerializer()
class Meta:
model = User
fields = ('username', 'email', 'password',
'is_consumer', 'is_business')
extra_kwargs = {'password': {'write_only': True}}
model = Consumer
fields = ('user','interests')
def create(self, validated_data):
user_data = validated_data
user = User.objects.create_user(user_data.get('username'),
user_data.get('email'),
user_data.get('password'))
consumer = Consumer.objects.create(user=user, interests=validated_data.get('interests'))
consumer.save()
return user兴趣序列化程序
class InterestsSerializer(serializers.ModelSerializer):
class Meta:
model = Interests
fields = ('technology', 'sports', 'health', 'diy', 'gaming', 'music', 'books', 'art',
'science', 'architecture', 'business', 'history', 'finance', 'biology', 'languages')用户模型
class User(AbstractUser):
email = models.CharField(max_length=100, unique=True)
#token = models.CharField(max_length=150, unique=True)
is_consumer = models.BooleanField(default=False)
is_business = models.BooleanField(default=False)
email_confirmation = models.BooleanField(default=False)消费者模型
class Consumer(models.Model):
GENDER_CHOICES = (
('Male', 'Male'),
('Female', 'Female'),
('Other', 'Other')
)
INTERESTS_CHOICES = (
('Sports', 'Sports'),
('Technology', 'Technology'),
('Health', 'Health'),
('DIY', 'DIY'),
('Gaming', 'Gaming'),
('Music', 'Music'),
('Books', 'Books'),
('Art', 'Art'),
('Science', 'Science'),
('Architecture', 'Architecture'),
('Business', 'Business'),
('History', 'History'),
('Finance', 'Finance'),
('Biology', 'Biology'),
('Languages', 'Languages')
)
user = models.OneToOneField(
User, related_name='consumer', on_delete=models.CASCADE)
interests = models.ForeignKey(Interests, related_name='interests', on_delete=models.CASCADE)
# interests = models.ForeignKey(Interests, related_name='interests', on_delete=models.CASCADE)
gender = models.CharField(max_length=6, choices=GENDER_CHOICES)
dob = models.DateField(null=True)
age = models.IntegerField(null=True)
balance = models.FloatField(default=0)
counter = models.IntegerField(default=0)发布于 2021-06-10 00:35:36
消费者-利益关系应该是多对多而不是一对多(ForeignKey),因此更改字段类型,进行迁移,迁移并重试。
https://stackoverflow.com/questions/67907794
复制相似问题