[英]How to use inner join tables in the DRF?
如何在 DRF 上實現內部連接數據。 我有兩個 model 類,一個是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"
)
視圖.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
)
然后
Client
創建一個ModelSerializer
class ClientSerializer(serializers.ModelSerializer):
class Meta:
model = Client
fields = '__all__'
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.