2015-11-22 3 views
0

Я пытаюсь расширить модель пользователя с OneToOneField, так что я могу добавить больше полей для пользователя:Как получить объект атрибуты OneToOneField отношения в Django-Rest-Framework

class Userattribs(models.Model):  
    user = models.OneToOneField(User) 
    passcode = models.IntegerField(default=0) 

    # about user 
    organisation = models.CharField(max_length=100, null=True) 
    description = models.CharField(max_length=300, null=True) 

Я также имеют следующие модели сериализаторы:

class UserattribsSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Userattribs 

     fields = ('organisation', 'description') 

class UserSerializer(serializers.ModelSerializer): 
    userattribs = UserattribsSerializer(required=True) 

    class Meta: 
     model = User 

     fields =('id', 'username', 'first_name', 'last_name', 'email', 'userattribs') 

проблема у меня в том сериализации пользователя, не включает в себя «userattribs» в ответ JSon. Я часами гулял и бил головой. Я буду вечно благодарен, если вы поможете мне.

Заранее благодарен!

Я добавил виды. Одна странная вещь, которую я заметил, это то, что когда я запросил (используя UserList) все данные, я получил бы Userattribs. Однако, когда я извлекаю один элемент, я не получаю Userattribs

################################################### 
### Views ######################################### 
################################################### 
class UserList(generics.ListCreateAPIView): 
    queryset = User.objects.all() 
    serializer_class = UserSerializer 
    permission_classes = (permissions.AllowAny,) 

class UserDetail(generics.RetrieveUpdateDestroyAPIView): 
    queryset = User.objects.all() 
    serializer_class = UserSerializer 
    permission_classes = (access_permission,) 
+0

добавьте свои 'urls.py' и выходы' UserDetail'view, пожалуйста. Что это за переменная 'access_permission'? Комментарий permission_classes для отладки –

ответ

0

Я не вижу ошибок в вашем коде. Вы уверены, что ваши объекты User имеют объект Userattribs.

Откройте оболочку Python с python manage.py shell и ввести это, чтобы проверить код:

#import your related models and serializer 
from your_app.models import * 
from your_app.serializer import * 
# create new user 
user = User.objects.create(username="test") 
# create new user attrib linked to `user` object 
user_attrib = Userattribs.objects.create(user=user, organisation="DJANGO") 
# serialize your `user` object 
user_serializer = UserSerializer(user) 
# display your serialized data 
user_serializer.data 
# outputs : {'last_name': '', 'userattribs': OrderedDict([('organisation', 'DJANGO'), ('description', None)]), 'email': '', 'username': 'test', 'first_name': '', 'id': 3} 

Если это нормально, то проблема может быть, придет с вашей точки зрения.

+0

Массовое спасибо за ответ Луи. Я сделал это как указано, и все это работает:/ Я подозреваю, что это может быть что-то делать с сериализаторами, но это выглядит правильно для меня. класс UserDetail (generics.RetrieveUpdateDestroyAPIView): QuerySet = User.objects.all() serializer_class = UserSerializer permission_classes = (access_permission,) – VViCKiD

+0

ваше добро. :) Добавьте свое мнение на свой вопрос, пожалуйста. –

+0

Спасибо, что помогли Луи. Я обновил сообщение с просмотрами, которые у меня есть – VViCKiD

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