簡體   English   中英

從Django ORM中檢索具有相關字段的查詢

[英]Retrieve query from django ORM with related fields

我在Django應用中創建了一個公司,兩個或兩個以上的人可以使用同一公司登錄。 我想將公司的一個用戶的數據顯示給公司的另一用戶。

為簡化起見:如果公司的一個用戶創建了一個對象,那么該對象對該公司的所有用戶都是可見的

但是我在提取數據時遇到了麻煩

型號

class ItemBatch(models.Model):
    uploaded_by = models.ForeignKey(User, on_delete=models.CASCADE, related_name='uploaded_by')
    name = models.CharField(max_length=100)
    pid = models.IntegerField(blank=True)
    quantity = models.IntegerField(blank=True)

class Teacher(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    company = models.ForeignKey(Company, on_delete=models.CASCADE, related_name='ship_company')


class User(AbstractUser):
    is_supplier = models.BooleanField(default=False)
    is_teacher = models.BooleanField(default=False)
    email = models.EmailField(default=False)

class Company(models.Model):
    company_name = models.CharField(max_length=255, default=0)
    company_email = models.EmailField(max_length=255, default=0)
    company_phone = models.CharField(max_length=255, default=0)
    company_code = models.IntegerField(default=0)

Views.py

class allordersview(viewsets.GenericViewSet, mixins.ListModelMixin):
  queryset = ItemBatch.objects.all()
  serializer_class = holdSerializer

  def list(self, request, *args, **kwargs):

      queryset = self.filter_queryset(self.get_queryset())

      queryset = queryset.filter(uploaded_by_id=request.user) # ??Changes?? 
      .
      .
      return Response(serializer.data)

如何更改查詢集,使其顯示公司的所有ItemBatch?

你可以做

queryset.filter(uploaded_by__teacher__company=request.user.teacher.company)

PS:而不是覆蓋list方法,而是覆蓋get_queryset方法並在其中應用過濾器,例如

def get_queryset(self):
    return ItemBatch.objects.filter(uploaded_by__teacher__company=self.request.user.teacher.company)

暫無
暫無

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

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