DjangoRest序列化程序:保存Foreignkey关系并序列化
我不熟悉Django rest和序列化程序的概念 我有这种数据库结构 用户1->N地址, 用户1->N电话DjangoRest序列化程序:保存Foreignkey关系并序列化,django,django-rest-framework,django-serializer,Django,Django Rest Framework,Django Serializer,我不熟悉Django rest和序列化程序的概念 我有这种数据库结构 用户1->N地址, 用户1->N电话 User是django.contrib.auth.models.User地址和电话两种型号都包含此字段user\u id=models.ForeignKey(user,on\u delete=models.CASCADE) 在我的UserSerializer中,如下所示 class UserSerializer(serializers.ModelSerializer): addr
User
是django.contrib.auth.models.User<代码>地址和电话两种型号都包含此字段user\u id=models.ForeignKey(user,on\u delete=models.CASCADE)
在我的UserSerializer中,如下所示
class UserSerializer(serializers.ModelSerializer):
address = AddressSerializer(many=False)
phone = PhoneSerializer(many=False)
class Meta:
model = User
fields = (
'id', 'username',
'first_name', 'last_name',
'email', 'password',
'address', 'phone')
def create(self, validated_data):
# Save user.
user = User.objects.create(
first_name=validated_data['first_name'],
last_name=validated_data['last_name'],
username=validated_data['username'],
email=validated_data['email'],
)
user.set_password(validated_data['password'])
user.save()
# User's address
address_data = validated_data['address']
address_data['user_id'] = user.id
address = Address.objects.create(**address_data)
# User's phone
phone_data = validated_data['phone']
phone_data['user_id'] = user.id
phone = Phone.objects.create(**phone_data)
return user
def create(self, validated_data):
password = validated_data.pop('password')
validated_data['username'] = validated_data['email']
user = User.objects.create(**validated_data)
user.set_password(password)
user.save()
return user
和地址序列化程序:
class AddressSerializer(serializers.ModelSerializer):
class Meta:
model = Address
fields = (
'user_id', 'address', 'pin_code', 'state', 'city', 'country')
我能够创建用户
,但在执行序列化程序时,数据
出现以下错误:
AttributeError: Got AttributeError when attempting to get a value for field `address` on serializer `UserSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `User` instance.
Original exception text was: 'User' object has no attribute 'address'.
编辑:
我的create
方法如下所示
class UserSerializer(serializers.ModelSerializer):
address = AddressSerializer(many=False)
phone = PhoneSerializer(many=False)
class Meta:
model = User
fields = (
'id', 'username',
'first_name', 'last_name',
'email', 'password',
'address', 'phone')
def create(self, validated_data):
# Save user.
user = User.objects.create(
first_name=validated_data['first_name'],
last_name=validated_data['last_name'],
username=validated_data['username'],
email=validated_data['email'],
)
user.set_password(validated_data['password'])
user.save()
# User's address
address_data = validated_data['address']
address_data['user_id'] = user.id
address = Address.objects.create(**address_data)
# User's phone
phone_data = validated_data['phone']
phone_data['user_id'] = user.id
phone = Phone.objects.create(**phone_data)
return user
def create(self, validated_data):
password = validated_data.pop('password')
validated_data['username'] = validated_data['email']
user = User.objects.create(**validated_data)
user.set_password(password)
user.save()
return user
如果没有明确指定
相关名称
,则应调用地址和电话字段地址集
和电话集
class UserSerializer(serializers.ModelSerializer):
address_set = AddressSerializer(many=False)
phone_set = PhoneSerializer(many=False)
class Meta:
model = User
fields = (
'id', 'username',
'first_name', 'last_name',
'email', 'password',
'address_set', 'phone_set'
)
或
对不起,我没听懂。你能给你的答案添加一个例子吗?我得到一个错误:字段“phone”在serializer UserSerializer上声明,但没有包含在“fields”选项中。@De̳̳ath stalle̳r̳是的。字段也应称为地址集。请参阅Updateum。。。新错误
TypeError:“address_set”是此函数的无效关键字参数
@De̲̳ath stalle̳r向您的帖子添加完整的错误跟踪我的答案解决了您的问题了吗?您在我的答案的评论中没有看到我的回复通知吗?@SardorbekImomaliev我看到通知了。抱歉,我没有检查浏览器。只是检查一下,我想可能是通知有问题,因为您的用户名中有unicode latters