django - Django - 通过带有外键引用的序列化程序创建一个实例
问题描述
我有一个机构和用户。我想User
通过UserSerializer
具有agency_id
. 但是,序列化程序validated_data
没有agency_id
调用后is_valid()
。
class Agency(models.Model):
name = models.CharField(max_length=60)
class User(modes.Model):
username = models.CharField(max_length=60)
agency = models.ForeignKey(Agency, blank=True, null=True)
class UserSerializer(serializers.ModelSerializer):
class Meta:
User = get_user_model()
model = User
fields = ( 'id', 'username', 'agency_id' )
read_only_fields = ['id']
尝试通过属于 Acme 代理的序列化程序创建用户:
agency = Agency.objects.create(name="Acme Agency")
serializer = UserSerializer(data={ 'username':'wiley', 'agency_id': agency.id} )
serializer.is_valid() # True
serializer.validated_data.get('agency_id') # None
通过 UserManager 使用代理 id 创建用户可以正常工作:
user = User.objects.create(username='wiley', agency_id=1)
user.agency.id # 1
解决方案
在UserSerializer中使用agency
而不是作为agency_id
class UserSerializer(serializers.ModelSerializer):
class Meta:
User = get_user_model()
model = User
fields = ('id', 'username', 'agency')
read_only_fields = ['id']
并使用 serailizer 作为,
serializer = UserSerializer(data={ 'username':'wiley', 'agency': agency.id} )
推荐阅读
- python - Python MongoDB 找到一个
- javascript - 页面刷新后保存文本框值的问题:所有文本框值都相同
- charts - 如何使用 ChartJS 在同一图表中添加预测数据和实际数据?
- java - JFrame 是否无法准确显示指定的宽度和高度值?
- flutter - 如何在地图列表中查找地图?
- javascript - ReactJS Flask:一个网页链接一直在本地主机上使用错误的端口 5000 而不是正确的端口 3000
- swift - 如何在 SwiftUI 中重置子视图?
- c# - 我无法使用 Nuget Nlua 在 C# 中读取 .lua 文件
- react-native - React Native 和 Cosmos DB - 如何让它们一起工作?
- asp.net - Web 应用程序 VS 2019 中的 ReportViewer