2016-11-21 2 views
1

Я искал всю сеть и не могу найти удовлетворительный ответ я изменил свою пользовательскую модель, добавив некоторые пользовательские поляКак сделать регистрацию пользователей в Django REST Framework API

Так что теперь я получил «имени пользователя», 'пароль', 'электронная почта', 'first_name', 'last_name', 'PhoneNumber', 'адрес'

вместо

'имя пользователя', 'пароль', 'электронная почта', 'first_name', 'last_name', --- (это по умолчанию) ---


Это мой models.py

from __future__ import unicode_literals 
from django.db import models 
from django.contrib.auth.models import User 

class userinformation(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    phonenumber = models.CharField(max_length=100) 
    address = models.CharField(max_length=200) 
    class Meta: 
     verbose_name_plural = "User Information" 
    def __str__(self): 
     return str(self.user)+' - '+self.phonenumber+' - '+self.address 

Im пытается сделать Django REST Framework API, на котором я могу размещать

 'username', 
     'password', 
     'email', 
     'first_name', 
     'last_name', 
     'phonenumber', 
     'address' 

и зарегистрировать пользователя с этими деталями то, что я должен добавить в моем ВЭИ ws.py и serializers.py

+0

Вы можете предоставить сериализатор и просмотр? – marin

ответ

2

Добавление этих других полей происходит от манипуляции с сериализатором. Вы могли бы сделать что-то вроде этого, чтобы выставить эти поля, если добавить поле related_name='user_information' к вашему определению модели:

user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='user_information') 

Затем вы создаете сериалайзер как:

class UserSerializer(serializers.HyperlinkedModelSerializer): 

    phonenumber = serializers.CharField(source='user_information.phonenumber') 
    address = serializers.CharField(source='user_information.address') 

    class Meta: 
     model = User 

     fields = ('username', 'password', 'email', 'first_name', 'last_name', 
      'phonenumber', 'address') 

и экземпляр этого сериалайзер на ваш взгляд:

class UserViewSet(viewsets.ModelViewSet): 
    queryset = User.objects.all() 
    serializer_class = UserSerializer 
    [...] 
+1

спасибо, что он работает хорошо, но он хранит пароль в текстовом формате, и я получил ошибку « Неверный формат пароля или неизвестный алгоритм хеширования». есть ли способ сохранить пароль, который был опубликован в переменной, поэтому я могу обновить его на u = User.objects.get (username = POST [имя пользователя]) u.set_password (POST [пароль]) u.save() –

+0

Если это сработало, вы должны перенести его и принять его :-) Что касается ваших других вопросов, так как вы пытаетесь установить несоленое и неподтвержденное значение в поле пароля вашей модели пользователя, вам нужно подключиться к ['update() 'в наборе представлений] (http://www.django-rest-framework.org/api-guide/viewsets/) –