访问通过django中的manytomanyfield创建的表数据

时间:2011-08-26 09:49:56

标签: python django django-models django-templates django-views

我有这个模型文件,其中用户可以拥有任意数量的服务器场,管理员可以创建费用并将其放在一个或多个服务器场上。问题是我想访问通过中的ManyToManyField创建的表收费模型。我想只选择那些与单个用户相关的manytomanyfield行。

假设管理员创建了一个ID为 “3383” 的费用,并从MultiSelectWidget中选择了五个农场。在这五个农场中,用户名“Mike”有两个农场.ManyToManyField table将在其表中创建5行,包括用户“Mike”farm的2行。我想访问这2行,但无法设法到达这两行。

注意: 我只有用户ID才能查找

Models.py

class Farm(models.Model):
    farmNo = models.CharField(max_length=100)

class FarmOwner(models.Model):
    owner = models.ForeignKey(User)
    farm = models.ManyToManyField(Farm)

class Charges(models.Model):
    chargeId = models.CharField(max_length=100)
    farms = models.ManyToManyField(Farm)

请帮忙

由于

2 个答案:

答案 0 :(得分:1)

考虑到费用ID为3383且用户为mike,您可以使用此

获取这两个相关行
mikes_farm_list = FarmOwner.Objects.filter(owner="Mike").values_list('farms', flat=True)
Charges.Objects.filter(chargeId=3383, farms__in=mikes_farm_list)

答案 1 :(得分:0)

mike = Farm.objects.get(farmNo="Mike")
for charge in mike.charge_set.all():
    print charge.chargeId

查看模型字段文档以查找多对多。您可以通过在Charge模型M2M声明中添加related_name =“charge”,将“charge_set”的属性名称更改为其他内容(“收费”)。