2015-09-10 5 views
5

Я создал профиль пользователя, используя пользователя Django auth, поэтому хочу получить имя пользователя, адрес электронной почты и телефон с помощью сериализатора модели UserProfile, поэтому можно получить данные из отношения внешнего ключа используя ModelSerializer в среде Django rest. Я не получаю никакого полезного решения от документации и Google, пожалуйста, помогите.django rest framework получить данные от внешнего ключевого отношения

class UserProfile(models.Model): 
    user = models.ForeignKey(User,) 
    phone = models.CharField(max_length=15, blank=True) 

class UserProfileSerializer(serializers.ModelSerializer): 
    class Meta: 
     model=UserProfile 
     fields = (phone,'user__username','user__email') 

ответ

8

Вам необходимо определить поляи email в вашем сериализаторе и передать аргумент source с пунктирной нотацией для прохождения атрибутов в модели User.

Вам нужно сделать что-то вроде:

class UserProfileSerializer(serializers.ModelSerializer): 
    username = serializers.CharField(source='user.username', read_only=True) 
    email = serializers.EmailField(source='user.email', read_only=True) 

    class Meta: 
     model=UserProfile 
     fields = (phone, username, email) 
+0

спасибо @Rahul Gupta его рабочий :) –

2

Если вы используете остальное - я хотел бы предложить предлагают сериализации модели пользователя что-то вроде этого

class UserSerializer(serializers.ModelSerializer): 
    phone = serializers.PrimaryKeyRelatedField(many=True, read_only=True) 

    class Meta: 
     model = User 
     fields = ('username', 'email', 'phone') 

Если вы хотите добиться обратного, а также:

class UserProfileserializer(serializers.ModelSerializer): 
    username = serializers.RelatedField(source='user', read_only=True) 
    email = serializers.RelatedField(source='user', read_only=True) 

    class Meta: 
     model = UserProfile 
     fields = ('username','email','phone') 
+0

спасибо за повтор, но я хочу, чтобы получить имя пользователя, адрес электронной почты и телефон с помощью UserProfile сериалайзера не от пользователя пользователя сериализатора так можно или нет. –

+0

Обновлено .. я думаю, что второй должен работать – Kannaj

+0

это ошибка throw: RelatedField.to_representation() должен быть реализован для поля электронной почты –

2

Попробуйте следующее:

# import your serializer class 
from myapp.serializers import UserProfileSerializer 

class UserSerializer(serializers.ModelSerializer): 
    phone = UserProfileSerializer(many=True, read_only=True) 

    class Meta: 
     model = User 
     fields = ('username', 'email', 'phone') 
Смежные вопросы