Как использовать внутренние соединения таблиц в DRF?

Как реализовать внутреннее объединение данных на DRF. У меня есть два класса моделей user и client. Когда я добавляю клиента, я выбираю список пользователей, который обрабатывается этим клиентом. Теперь, когда я получаю список пользователей из API, мне нужно имя клиента также в этом API. Мои модальные классы следующие:

class User(AbstractBaseUser, PermissionsMixin):
    identifier = models.UUIDField(default=uuid.uuid4, editable=False, serialize=False, verbose_name='identifer')
    email = models.EmailField(max_length=255, unique=True)
    name = models.CharField(max_length=255)
    image = models.ImageField(null=True, upload_to=user_image_file_path)
    contact_no = models.CharField(max_length=255, default='')

class Client(models.Model):
    name = models.CharField(max_length=200)
    main_contact = models.ForeignKey(
        'User',
        on_delete=models.CASCADE,
        related_name="main_contact",
        null=True
    )
    users = models.ManyToManyField(
        User,
        related_name="users"
    )

views.py

class GetAllUserList(generics.ListAPIView):
    permission_classes = (permissions.IsAuthenticated, jwtPermissions.IsSSOAdminOrReadOnly,)
    queryset = User.objects.all()
    pagination_class = PostLimitOffsetPagination
    serializer_class = GetAllUserSerializer

serializers.py

class GetAllUserSerializer(serializers.ModelSerializer):
    class Meta:
        model = get_user_model()
        fields = '__all__'

Любые предложения будут очень полезны!

поскольку вы используете DRF, один из простых способов - полагаться на встроенную функциональность DRF:

Для ясности, предполагая, что это ваш models.py

class User(models.Model):
    identifier = models.UUIDField(default=uuid.uuid4, editable=False, serialize=False, verbose_name='identifer')
  

class Client(models.Model):
    name = models.CharField(max_length=200)
    main_contact = models.ForeignKey(
        'User',
        on_delete=models.CASCADE,
        related_name="main_contact",
        null=True
    )

Тогда

  1. создайте ModelSerializer для Client
class ClientSerializer(serializers.ModelSerializer):
    class Meta:
        model = Client
        fields = '__all__'
  1. измените свои UserSerializer следующим образом:
class UserSerializer(serializers.ModelSerializer):
    clients = ClientSerializer(many=True, source='main_contact')
    queryset = User.objects.prefetch_related('main_contact').all()
    class Meta:
        model = User
        fields = '__all__'

таким образом, вы сможете получить всех пользователей и их клиентов.

ссылка:

Вернуться на верх