Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用相关字段从django ORM检索查询_Python_Django - Fatal编程技术网

Python 使用相关字段从django ORM检索查询

Python 使用相关字段从django ORM检索查询,python,django,Python,Django,我在django应用程序中创建了一个公司,两个或多个用户可以登录同一个公司。我想向公司的另一个用户显示公司一个用户的数据 简化:如果公司的一个用户创建了一个对象,那么该对象应该对该公司的所有用户都可见 但是我在提取数据时遇到了困难 Models.py class ItemBatch(models.Model): uploaded_by = models.ForeignKey(User, on_delete=models.CASCADE, related_name='uploaded_by

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

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

但是我在提取数据时遇到了困难

Models.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)
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:代替覆盖
列表
方法覆盖
获取查询集
方法并在那里应用过滤器

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

queryset.filter(uploaded_by__teacher__company=request.user.teacher.company)
PS:代替覆盖
列表
方法覆盖
获取查询集
方法并在那里应用过滤器

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