2017-02-15 5 views
0

модель пользователя и модель UserProfile связаны с один-к-одному полю .Я хочу отправить данные через сериализатором но программа выдает ошибку ...Джанго один-к-одному с поля модели пользователя с помощью сериалайзер

это код модели ..

class UserProfile(models.Model): 
    GENDERS = (
     ('M', 'Male'), 
     ('F', 'Female'), 
     ('T', 'Transgender'), 
    ) 
    user = models.OneToOneField(User) 
    dob = models.DateField(null=True) 
    contactno = models.BigIntegerField(null=True) 
    gender = models.CharField(max_length=1, choices=GENDERS,blank=True, null=True) 
    country = models.ForeignKey(Country, null=True) 
    state = ChainedForeignKey(State,chained_field="country", chained_model_field="country", null=True) 
    city = ChainedForeignKey(City,chained_field="state", chained_model_field="state", null=True) 
    pin_code = models.IntegerField(null=True, blank=True, default = None) 
    class Meta: 
     verbose_name_plural = 'User Profile' 
    def __unicode__(self): 
     return str(self.user) 

это сериализатору код ...

class userProfileSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = UserProfile 
     fields = ("dob","contactno","country","state","city",'user') 





class userSerializer(serializers.ModelSerializer): 
    dob = userProfileSerializer() 
    contactno = userProfileSerializer() 
    country = countrySerializer() 
    state = stateSerializer() 
    city = citySerializer() 
    class Meta: 
     model = User 
     fields = ('username','email','password',"dob","contactno","country","state","city") 


    def create(self, validated_data): 
     dob_data = validated_data.pop('dob') 
     contactno_data = validated_data.pop('contactno') 
     country_data = validated_data.pop('country') 
     state_data = validated_data.pop('state') 
     city_data = validated_data.pop('city') 


     user = User.objects.create(username=validated_data['username'],email=validated_data['email'],password=validated_data['password']) 
     user.set_password(validated_data['password']) 
     user.save() 
       UserProfile.objects.create(user=user,dob=dob_data,contactno=contactno_data,country=country_data,state=state_data,city=city_data) 
    return user 

это будет очень здорово, если бы кто-нибудь мне помочь ....

+0

Показана ошибка будет полезна. –

ответ

0

Вам не нужен специальный сериализатор для UserProfile, если вы просто хотите сохранить UserProfile.

Вот минимальный пример, используя только поле dob, но те же правила применяются к другим полям.

class UserSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = User 
     fields =('username','email','password', 'dob') 

    def create(self, validated_data): 
     dob_data = validated_data.pop('dob') 

     user = User.objects.create(
      username=validated_data.get('username'), 
      email=validated_data.get('email'), 
      password=validated_data.get('password') 
     ) 
     user.set_password(validated_data.get('password')) 
     user.save() 

     UserProfile.objects.create(user=user, dob=dob_data) 
     return user 
+0

, когда я использую метод POST, он дает ошибку ... {"user": ["Это поле обязательно."]} –

+0

Вы копируете мой пример дословно? Потому что в моем примере 'user' устанавливается при создании экземпляра UserProfile, поэтому он не дает этой ошибки. Пожалуйста, используйте мой пример как есть и попытайтесь работать оттуда. – mislavcimpersak

+0

спасибо за ваш отзыв .... его работа –

Смежные вопросы