У меня есть 3 модели: пользователь, адрес и AdressToUser в качестве модели адреса будут использоваться в качестве адреса для другой модели в моем проекте.
class Adress(models.Model):
"""
Adresse utilisable pour les extras et les restaus
"""
numero = models.PositiveIntegerField(_('numéro'), blank=True, null=True)
adress = models.CharField(_('nom de la voie'), max_length=254, blank=False, null=False)
code_postal = models.PositiveIntegerField(_('Code Postal'), blank=False, null=False)
ville = models.CharField(_('Ville'), max_length=100, blank=False, null=False)
def __str__(self):
return '%s %s %s %s' % (self.numero, self.adress, self.code_postal, self.ville )
class AdressToUser(models.Model):
user = models.ForeignKey(User, verbose_name="Utilisateur", on_delete=models.CASCADE, related_name='adressu',)
adress = models.ForeignKey(Adress, verbose_name="Adresse", on_delete=models.CASCADE, related_name='adressa')
def __str__(self):
return '%s %s' % (self.user_id, self.adress)
последняя модель: пользователь si определен с помощью сериализатора:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'password', 'email', 'first_name', 'last_name')
# permet de cacher le password à l'affichage du user
extra_kwargs = {'password': {'write_only': True, 'required':True}}
# permet de hasher le password avant enregistrement sinon en clair
def create(self, validated_data):
user = User.objects.create_user(**validated_data)
Token.objects.create(user=user)
return user
цель состоит в следующем: я хочу зарегистрировать обе модели User, Adress и AdressToUser с одним сериализатором.
class AdressSerializer(serializers.ModelSerializer):
class Meta:
model = Adress
fields =('__all__')
class AdressToUserSerializer(serializers.ModelSerializer):
user = UserSerializer(many=False)
adress = AdressSerializer(many=False)
class Meta:
model = AdressToUser
fields = ('user', 'adress')
# authentication_classes = (TokenAuthentication,)
# permission_classes = (IsAuthenticated,)
def create(self, validated_data):
user_data = validated_data.pop('user')
user = UserSerializer(data=user_data)
user.is_valid()
user = user.save()
adress_data = validated_data.pop('adress')
adress = AdressSerializer(data=adress_data)
adress.is_valid()
adress = adress.save()
print(user.id, adress.id) #just to see what they are
#
#
AdressToUser.objects.create(**{'user': user.id, 'adress_id': adress.id})
return AdressToUser
У меня возникает следующая проблема:
Невозможно назначить «xx»: «AdressToUser.user» должен быть экземпляром «User».
На этом этапе я не удалось создать экземпляр AdressToUser. Я прочитал и попробовал множество различных решений этой проблемы без успеха.
Спасибо за предоставленную помощь.