#django-rest-framework
#django-rest-framework
Вопрос:
У меня есть две модели User и Vendor (они связаны с OneToOne, я хочу создать поставщика, который включает нового пользователя.
Проблема, когда я использую метод User.objects.create(UserSerializer(),validated_data =user_data) внутри моего переопределяемого метода create() VendorSerializer, я получаю сообщение об ошибке «create () принимает 1 позиционный аргумент, но были заданы 2»
что я могу сделать больше, чем переопределить create в UserSerializer() ? уже пробовал
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = (
'first_name',
'last_name',
'email',
'username'
)
class VendorSerializer(serializers.ModelSerializer):
user = UserSerializer(required=True)
class Meta:
model = Vendor
fields = ('user','no_rue','adresse','code_postal','ville','pays')
def create(self, validated_data):
user_data = validated_data.pop('user')
user = User.objects.create(UserSerializer(),validated_data=user_data)
vendor, created = Vendor.objects.update_or_create(user=validated_data.pop('user'),no_rue=validated_data.pop('no_rue'),
adresse = validated_data.pop('adresse'),
code_postal = validated_data.pop('code_postal'),
ville = validated_data.pop('ville'),
pays = validated_data.pop('pays'))
return vendor
class Vendor(models.Model):
rating = models.FloatField(
null=True,
blank=True,
validators=[MaxValueValidator(5),MinValueValidator(1)]
)
IBAN = IBANField(null=True,unique=True, default=None)
user = models.OneToOneField(User, on_delete=models.CASCADE)
photo = models.ImageField(blank=True,null=True, upload_to='images') #Param: upload_to='directory'
no_rue = models.PositiveIntegerField()
adresse = models.CharField(max_length = 25)
code_postal = models.PositiveIntegerField(validators=[MaxValueValidator(99999),MinValueValidator(1000)])
ville = modelenter code heres.CharField(max_length = 25)
pays = models.CharField(max_length = 25)
def __str__(self):
if(self.user.first_name == ""):
return self.user.username
else:
return self.user.first_name
Комментарии:
1. попробуйте изменить на
User.objects.create(*user_data)
.2. да, я забыл закрыть тему, это было именно так… (**user_data)