Django Сериализатор из ManyToManyField с использованием сквозной обработки
Я пытаюсь сериализовать модель User из Django, включая созданное мной отношение manyToMany.
Вот мои модели:
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
является modelname_set
, поэтому вы можете реализовать это с помощью:
class UserSerializer(serializers.ModelSerializer):
companyaccount_set = CompanyAccountSerializer(many=True, read_only=True)
class Meta:
model = User
fields = ['id', 'username', 'email', 'first_name', 'last_name', 'companyaccount_set']
Если вы хотите переименовать поле, вы можете использовать:
class UserSerializer(serializers.ModelSerializer):
accounts = CompanyAccountSerializer(many=True, read_only=True, source='companyaccount_set')
class Meta:
model = User
fields = ['id', 'username', 'email', 'first_name', 'last_name', 'accounts']