2016-09-25 39 views
1

我是Django Rest Frame工作的初學者。我想創建一個自定義用戶,但長期以來我有一個問題,我嘗試通過許多論壇來尋找解決方案,但不幸的是,我沒有成功。希望大家幫我Django rest框架一對一關係創建串行器

models.py

class Account(models.Model): 

    user=models.OneToOneField(User,on_delete=models.CASCADE) 
    image=models.ImageField(upload_to='Images/',default='Images/user.png') 
    date=models.DateField(auto_now=True,auto_now_add=False) 

Serializers.py

class AccountCreateUpdateSerializer(serializers.ModelSerializer): 


    user=UserListSerializers() 
    image=serializers.ImageField() 

    class Meta: 
     model= Account 
     fields=['id','user','image'] 
    def create(self,validated_data): 
     user_data=validated_data.pop('user') 
     account=Account.objects.create(**validated_data) 
     User.objects.create(account=account,**user_data) 

     return account 

錯誤: enter image description here

回答

3

你的問題是在這裏:

user_data = validated_data.pop('user') 
    account = Account.objects.create(**validated_data) 
    User.objects.create(account=account, **user_data) 

您正在嘗試在創建用戶之前創建一個帳戶,這不起作用,因爲帳戶需要user_id的值。如果您的用戶模型有一個外部帳戶的帳戶,而不是其他方式,然後創建該帳戶是正確的方式來做到這一點。

切換到:只要

user_data = validated_data.pop('user') 
    user = User.objects.create(**user_data) 
    account = Account.objects.create(user=user, **validated_data) 

應該可以解決問題,因爲你是UserListSerializers()提供正確的數據來創建一個User實例。

希望有所幫助。

+0

問題修復:)謝謝你 – asus1902