首页 > 解决方案 > 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

标签: djangodjango-serializer

解决方案


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} )

推荐阅读