Django ManyToMany字段查询

时间:2018-05-16 14:04:06

标签: django python-3.x

几天以来,我一直在寻找解决这个问题的最简单方法。所以我有模型,用户,公司模型和产品型号如下。

model .py

class Company(models.Model):
    name=models.CharField(models.Model)
    user=models.ForeignKey(user,unique=True,null=True,related_name="user")
    follow=models.ManyToMany(user,related_name="follow",null=True)

class Product(models.Model):
     name=models.Charfield(models.Model)
     company=models.ForeignKey(Company,related_name="Product",null=True)

在我看来

def Display(request):
    #get all products 
     products=Product.objects.all()
     #get all company objects
     companies=Company.objects.all()

所以这个想法是用户可以关注公司和公司可以发布产品。假设userA跟随companyA(usA已被添加到公司的ManyToManyField),当companyA发布产品时,产品将显示在usA时间轴中。我做过研究,甚至还遇到了一个名为django activity streaming的应用程序。我很难融入我的项目。因为我只是在寻找简单的东西。我正在阅读跟踪所有模型的django contenttype,但我不知道如何实现它来解决我的问题。如果您对如何使用django查询集或任何建议解决此问题有所了解请。我很乐意欣赏。

1 个答案:

答案 0 :(得分:0)

假设您有一个用户对象。您可以使用related_name mod访问反向关系,然后通过该关系获取该用户关注的所有公司,之后我们可以根据这些公司获取所有产品:

companies user.follow.all()
products = Product.objects.filter(company__in=companies)

products将包含属于其中一个用户公司的所有产品的列表,如果您遇到问题,如果有重复的产品,则可以使用distinct() queryset方法进行修复。< / p>