我有这个模型文件,其中用户可以拥有任意数量的服务器场,管理员可以创建费用并将其放在一个或多个服务器场上。问题是我想访问通过中的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)
请帮忙
由于
答案 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”的属性名称更改为其他内容(“收费”)。