如何在 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。
我定义了三个模型。我想过滤获取特定用户并获取结果集中的所有相关字段。例如,我想获取该用户的 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。