来自 ManyToManyField 的 Django Serializer 使用 through
Django Serializer from ManyToManyField using through
我正在尝试从 Django 序列化用户模型,包括我创建的多对多关系。
这是我的模型:
class CompanyAccount(models.Model):
id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True, editable=False)
user_ids = models.ManyToManyField(User, through='CompanyUser')
class CompanyUser(models.Model):
id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True, editable=False)
user_id = models.ForeignKey(User, on_delete=models.CASCADE)
company_id = models.ForeignKey(CompanyAccount, on_delete=models.CASCADE)
is_company_admin = models.BooleanField(default=False, null=True)
现在我的目标是将公司序列化并与任何用户一起返回。
这是我的序列化程序,但遗憾的是公司没有返回。
class CompanyAccountSerializer(serializers.ModelSerializer):
address_id = AddressSerializer(many=False)
class Meta:
model = CompanyAccount
fields = '__all__'
class UserSerializer(serializers.ModelSerializer):
company_id = CompanyAccountSerializer(many=False, read_only=True)
class Meta:
model = User
fields = ['id', 'username', 'email', 'first_name', 'last_name', 'company_id']
欢迎任何帮助:-)
ManyToManyField
的默认相关名称是<i>modelname</i>_set
,所以你可以这样实现:
class UserSerializer(serializers.ModelSerializer):
<strong>companyaccount_set</strong> = CompanyAccountSerializer(many=True, read_only=True)
class Meta:
model = User
fields = ['id', 'username', 'email', 'first_name', 'last_name', 'companyaccount_set']
如果要重命名字段,可以使用:
class UserSerializer(serializers.ModelSerializer):
<strong>accounts</strong> = CompanyAccountSerializer(many=True, read_only=True, <b>source='companyaccount_set'</b>)
class Meta:
model = User
fields = ['id', 'username', 'email', 'first_name', 'last_name', <b>'accounts'</b>]
我正在尝试从 Django 序列化用户模型,包括我创建的多对多关系。
这是我的模型:
class CompanyAccount(models.Model):
id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True, editable=False)
user_ids = models.ManyToManyField(User, through='CompanyUser')
class CompanyUser(models.Model):
id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True, editable=False)
user_id = models.ForeignKey(User, on_delete=models.CASCADE)
company_id = models.ForeignKey(CompanyAccount, on_delete=models.CASCADE)
is_company_admin = models.BooleanField(default=False, null=True)
现在我的目标是将公司序列化并与任何用户一起返回。
这是我的序列化程序,但遗憾的是公司没有返回。
class CompanyAccountSerializer(serializers.ModelSerializer):
address_id = AddressSerializer(many=False)
class Meta:
model = CompanyAccount
fields = '__all__'
class UserSerializer(serializers.ModelSerializer):
company_id = CompanyAccountSerializer(many=False, read_only=True)
class Meta:
model = User
fields = ['id', 'username', 'email', 'first_name', 'last_name', 'company_id']
欢迎任何帮助:-)
ManyToManyField
的默认相关名称是<i>modelname</i>_set
,所以你可以这样实现:
class UserSerializer(serializers.ModelSerializer):
<strong>companyaccount_set</strong> = CompanyAccountSerializer(many=True, read_only=True)
class Meta:
model = User
fields = ['id', 'username', 'email', 'first_name', 'last_name', 'companyaccount_set']
如果要重命名字段,可以使用:
class UserSerializer(serializers.ModelSerializer):
<strong>accounts</strong> = CompanyAccountSerializer(many=True, read_only=True, <b>source='companyaccount_set'</b>)
class Meta:
model = User
fields = ['id', 'username', 'email', 'first_name', 'last_name', <b>'accounts'</b>]