簡體   English   中英

如何在 DRF 中使用內連接表?

[英]How to use inner join tables in the DRF?

如何在 DRF 上實現內部連接數據。 我有兩個 model 類,一個是userclient 當我添加客戶端時,我正在選擇由該客戶端處理的用戶列表。 現在,當我從 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"
    )

視圖.py

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

序列化程序.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. Client創建一個ModelSerializer
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__'

這樣,您也應該能夠獲得所有用戶及其客戶。

參考:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM