Django - 通过带有外键引用的序列化程序创建实例

Django - Creating an instance via the serializer with a foreign key reference

我有代理商和用户。我想通过具有 agency_idUserSerializer 创建 User 个实例。但是序列化器的 validated_data 在调用 is_valid().

后没有 agency_id
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 = 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

使用代理商 ID 通过 UserManager 创建用户效果很好:

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', <b>'agency')</b>
        read_only_fields = ['id']

并将序列化器用作,

serializer = UserSerializer(data={ 'username':'wiley', <b>'agency': agency.id}</b> )