Python Django:基于一对多关系筛选记录
我有以下几种型号Python Django:基于一对多关系筛选记录,python,django,django-models,Python,Django,Django Models,我有以下几种型号 class User(models.Model): name = models.CharField(max_length=255) ... class InsuranceProfile(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) ... class ProductExpertiseMaster(models.Model):
class User(models.Model):
name = models.CharField(max_length=255)
...
class InsuranceProfile(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
...
class ProductExpertiseMaster(models.Model):
class Meta:
db_table = 'product_expertise_master'
name = models.CharField(max_length=255)
main_category = models.CharField(max_length=255)
class UserProductExpertise(models.Model):
user = models.ForeignKey(User, on_delete=models.DO_NOTHING)
product_expertise = models.ForeignKey(ProductExpertiseMaster, on_delete=models.DO_NOTHING)
所以我想做的是,我想根据不同的字段过滤记录,其中一些属于用户模型&其中一些属于
InsuranceProfile
模型。我正在根据运行良好的用户&InsuranceProfile
模型过滤记录。现在,我想再添加一个过滤器,它将基于userproductexperties
模型。我想获得所有保险配置文件,其中包含用户详细信息,这些用户详细信息与userproductexperties
模型中的产品专业知识条目具有某些匹配条件。任何帮助都将不胜感激。您可以通过以下方式尝试:
它将返回在
userproductexperties
model中有条目的所有用户。对于查询,您需要使用模型名称的所有小写字母(即userProductExperience
),并在其末尾添加\uu isnull
。您可以使用以下方法进行类似尝试:
它将返回在
userproductexperties
model中有条目的所有用户。对于查询,您需要使用模型名称的所有小写字母(即userproductexperties
),并在其末尾添加\u isnull
。我认为您应该在继续之前对模型进行一些更改
UserProductExperties模型是ProductExpertiesMaster和用户之间的桥接表,它提供了多对多关系。若不向UserProductExperties模型添加其他字段,则可以删除该字段并在ProductExpertiesMaster模型中定义用户关系
如果您更愿意为该关系使用单独的模型,请在_delete=models.DO_上将其更改为models.CASCADE
下面是一个具有多对多关系的示例:
class User(models.Model):
name = models.CharField(max_length=255)
class InsuranceProfile(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
content = models.CharField(("Content"), max_length=500)
class ProductExpertiseMaster(models.Model):
class Meta:
db_table = 'product_expertise_master'
name = models.CharField(max_length=255)
main_category = models.CharField(max_length=255)
user = models.ManyToManyField(User, verbose_name=("Users"), related_name="expertises")
要筛选查询,请执行以下操作:
InsuranceProfile.objects.filter(user__expertises__isnull=False)
我认为你应该在继续之前对你的模型做一些修改 UserProductExperties模型是ProductExpertiesMaster和用户之间的桥接表,它提供了多对多关系。若不向UserProductExperties模型添加其他字段,则可以删除该字段并在ProductExpertiesMaster模型中定义用户关系 如果您更愿意为该关系使用单独的模型,请在_delete=models.DO_上将其更改为models.CASCADE 下面是一个具有多对多关系的示例:
class User(models.Model):
name = models.CharField(max_length=255)
class InsuranceProfile(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
content = models.CharField(("Content"), max_length=500)
class ProductExpertiseMaster(models.Model):
class Meta:
db_table = 'product_expertise_master'
name = models.CharField(max_length=255)
main_category = models.CharField(max_length=255)
user = models.ManyToManyField(User, verbose_name=("Users"), related_name="expertises")
要筛选查询,请执行以下操作:
InsuranceProfile.objects.filter(user__expertises__isnull=False)
我想我必须重新表述我的问题。我已经在用户模型的InsuranceProfile模型上应用了筛选器,我想添加UserProductExperience模型文件管理器。我的最终输出应该是与所有三个模型匹配的所有条目。希望这会清除它,或者如果您想了解更多,请告诉我。更新了我的答案我非常感谢您……我想我必须重新表述我的问题。我已经在保险配置文件模型和用户模型上应用了筛选器,我想添加UserProductExperties模型文件管理器。我的最终输出应该是与所有三个模型匹配的所有条目。希望这会清除它,或者如果你想知道更多,请告诉我。更新了我的答案我无法感谢你。。。。