2017-02-15 4 views
0

Le modèle de l'utilisateur et le modèle UserProfile sont reliés à un à un champ .Je souhaite publier des données par le biais de sérialiseur mais le programme donne l'erreur ...django un à un champs avec le modèle de l'utilisateur avec l'aide sérialiseur

ce code est modèle ..

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) 

ce code est sérialiseur ...

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 

il sera très bien si quelqu'un me aider ....

+0

Affichage de l'erreur serait utile. –

Répondre

0

Vous n'avez pas besoin de sérialiseur spécial pour UserProfile si vous voulez simplement enregistrer UserProfile comme ça.

Voici un exemple minimal utilisant uniquement le champ dob, mais les mêmes règles s'appliquent aux autres champs.

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

lorsque j'utilise la méthode POST, il donne une erreur ... {"user": ["Ce champ est obligatoire."]} –

+0

Copiez-vous mon exemple verbatim? Parce que dans mon exemple 'user' est en train d'être défini lors de la création de l'instance' UserProfile', donc cela ne donne pas cette erreur. S'il vous plaît utilisez mon exemple tel quel et essayez de travailler à partir de là. – mislavcimpersak

+0

merci pour votre réponse .... son fonctionnement –