从带有相关字段的Django ORM检索查询

2024-04-20 11:13:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我在django应用程序中创建了一个公司,两个或多个用户可以登录同一个公司。我想把公司的一个用户的数据显示给公司的另一个用户

简化:如果一个公司的一个用户创建了一个对象,那么它应该对该公司的所有用户都可见

但是我提取数据有困难

型号.py

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)

视图.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


Tags: 用户namedefaultbymodelmodels公司length
1条回答
网友
1楼 · 发布于 2024-04-20 11:13:16

你能做到的

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

PS:不要重写list方法,而是重写get_queryset方法并在那里应用filter

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

相关问题 更多 >