1

我是Django和DRF的新手,但我試圖使用DRF的串行器來覆蓋djosers的默認用戶註冊行爲。
(左塞爾=一個DRF LIB用於用戶註冊/登錄/密碼復位等)Django REST框架串行器輸出

我djosers查看,使用串行化器中創建用戶對象
def perform_create(self, serializer): user = serializer.save()

我的想法是覆蓋此串行化器來實現以下內容:

  1. 創建用戶
  2. 創建並聯
  3. LO中的帳戶對象杜松子酒用戶
  4. 回報帳戶對象一起與身份驗證令牌在一個響應

最後一點給我的麻煩,因爲我不知道如何實現串行這種自定義行爲。我只是輸入字段,所以它們不包含在我的回覆中。在save方法中,創建一個用戶+帳戶對象,登錄用戶,然後返回用戶(視圖需要)
如何將創建的帳戶對象與創建的令牌字符串序列化爲一個響應?

這是我的串行(簡體和一些東西剝離,但基本上它)

class UserRegistrationSerializer(serializers.Serializer): 
email = serializers.EmailField(write_only=True) 
# some other fields 
password = serializers.CharField(style={'input_type': 'password'}, 
           write_only=True, 
           validators=settings.get('PASSWORD_VALIDATORS') 
           ) 
# this should be the output 
account = Account(read_only=True) 

def save(self): 
    user = User(email=self.validated_data['email']) 
    user.set_password(self.validated_data['password']) 
    user.save() 

    account = Account(user=user) 
    token = #logging in my user 

    return user 

回答

1

使用本:

class UserRegistrationSerializer(serializers.ModelSerializer): 
    email = serializers.EmailField(write_only=True) 
    # some other fields 
    password = serializers.CharField(
           style={'input_type': 'password'}, 
           write_only=True, 
           validators=settings.get('PASSWORD_VALIDATORS') 
           ) 
    # make sure you have related_name='account' in your one to one field 
    account = AccountSerializer(read_only=True) 
    # the token field 
    auth_token = TokenSerializer(read_only=True) 

    class Meta: 
     model = User 
     # define fields based on your needs 
     fields = ... 

    def create(self, validated_data): 
     user = User(email=self.validated_data['email']) 
     user.set_password(self.validated_data['password']) 
     user.save() 
     # create account 
     account = Account(user=user) 
     # create token for user 
     token = Token.objects.update_or_create(user=user) 
     return user 

,你還需要創建一個基於update方法您的自定義需求。

+0

甜,這是訣竅!但是,這僅適用於用戶模型對帳戶模型和令牌模型的引用。就未來而言,如何將一個完全無用的用戶序列化爲響應? – JimmyVanBraun

+0

@JimmyVanBraun您可以使用方法字段。請查看http://www.django-rest-framework.org/api-guide/fields/#serializermethodfield –