如何在 django 中的相关集上过滤所有字段?

How to get all fields with filtering on the related set in django?

我定义了三个模型。我想过滤获取特定用户并获取结果集中的所有相关字段。例如,我想获取该用户的 supplierInfo 和公司信息。

class User(AbstractBaseUser):
    user_email= models.EmailField(unique=True, max_length=254)
    user_id = models.AutoField(primary_key=True)
    staff=models.BooleanField(default=True)
    admin=models.BooleanField(default=True)
    role_id=models.IntegerField(default=0)
    supplier=models.ForeignKey(Supplier, on_delete=models.CASCADE) ....

class Company(models.Model):
    company_name= models.CharField(('company name'), max_length=255, blank=True)
    company_id  = models.AutoField(primary_key=True)
    class Meta:
        verbose_name = ('company')
        verbose_name_plural = ('company')
        db_table = "company"

    def __str__(self):
        return self.company_name

class Supplier(models.Model):
    supplier_name= models.CharField(('supplier name'), max_length=255, blank=True)
    supplier_id = models.AutoField(primary_key=True)
    company=models.ForeignKey(Company, on_delete=models.CASCADE)
    class Meta:
        verbose_name = ('supplier')
        verbose_name_plural = ('supplier')
        db_table = "supplier"
    def __str__(self):
        return self.supplier_name

我试过了

 userInfo=User.objects.filter(user_id__exact=user.user_id).get()
 userRelated= Supplier.objects.filter(supplier_id__exact=userInfo.supplier_id).get() 
 companyRelated=Company.objects.filter(company_id__exact=userRelated.company_id).get()

我得到了预期的结果,但我认为这不是最好的方法。我想合并三个查询并在一个对象中得到结果。我是 django 的新手所以请帮助我。

您可以通过定义外键来创建一对一关系。 https://docs.djangoproject.com/en/3.0/topics/db/examples/one_to_one/ 文档写的真好,建议你自己看看

如果您这样做,您将可以在使用典型的 django orm 方法时访问相关的 table。