多对多的关系。从当前登录的用户获取对象

时间:2013-11-30 18:36:19

标签: django

此代码:

class Food(models.Model):
    user = models.ForeignKey(User)
    name = models.CharField(max_length=199)


class Box(models.Model):
    user = models.ForeignKey(User)
    food = models.ManyToManyField(Food, blank=True, null=True)

如何在我的观看功能中获取food当前登录用户(Box)中的所有request.user

def get_food(request, id):
    box = Box.objects.filter(user=request.user, id=id)

2 个答案:

答案 0 :(得分:0)

def get_food(request, id):
    box = Box.objects.filter(user=request.user, id=id)
    food = Food.objects.filter(box=box)

答案 1 :(得分:0)

规范方法是定义适当的related_name

class Food(models.Model):
    user = models.ForeignKey(User, related_name='foods')
    name = models.CharField(max_length=199)

class Box(models.Model):
    user = models.ForeignKey(User, related_name='boxes')
    food = models.ManyToManyField(Food, blank=True, null=True)

所以你可以这样做:

request.user.foods.all()

或者:

request.user.boxes.all()

即使没有related_name,您仍然可以:

request.user.food_set.all()
request.user.box_set.all()

有关详细信息,请参阅https://docs.djangoproject.com/en/dev/topics/db/queries/#backwards-related-objects