Skip to main content
 首页 » 编程设计

python之从 Django ORM 检索查询

2024年11月01日27TianFang

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

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

模型.py

class User(AbstractUser): 
    is_employee = models.BooleanField(default=False) 
    is_client = models.BooleanField(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) 
 
    def __str__ (self): 
        return self.company_name 
 
class Employee(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True) 
    company = models.ForeignKey(Company, on_delete=models.CASCADE, related_name='comapany_owner') 
 
    def __str__ (self): 
        return self.user.username 
class Product(models.Model): 
 
    product_name = models.CharField(max_length=255, default=0) 
    product_priceperunit = models.IntegerField(default=0) 
    product_owner = models.ForeignKey(Employee, on_delete=models.CASCADE, related_name='product_owner') 

Views.py

@method_decorator([login_required, employee_required], name='dispatch') 
class ProductsTableView(ListView): 
    model = Product 
    context_object_name = 'product' 
    template_name = 'packsapp/employee/employeeProductsTable.html' 
 
    def get_queryset (self): 
        queryset = Product.objects.filter(product_owner=self.request.user.employee) 
        return queryset 

这里我按员工提取数据。如何修改查询以提供同一公司所有员工的数据??

请您参考如下方法:

如果这意味着该 Product 的 product_owner 与该员工的公司属于同一家公司,我们可以过滤:

@method_decorator([login_required, employee_required], name='dispatch') 
class ProductsTableView(ListView): 
 
    # ... 
 
    def get_queryset (self): 
        return Product.objects.filter( 
            <b>product_owner__company=self.request.user.employee.company</b> 
        )