代码之家  ›  专栏  ›  技术社区  ›  Maverik Minett

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

  •  0
  • Maverik Minett  · 技术社区  · 7 年前

    我有一个代理和用户。我想创造 User 实例通过 UserSerializer 有一个 agency_id . 但是序列化程序 validated_data 没有 机构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
    

    使用代理id通过UserManager创建用户非常好:

    user = User.objects.create(username='wiley', agency_id=1)
    user.agency.id # 1
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   JPG    7 年前

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