在Django中访问通过ManyToManyField创建的表数据
我有一个模型文件,用户可以拥有任意数量的农场,而管理员可以创建收费项目并将其放在一个或多个农场上。现在的问题是,我想访问在Charges模型中通过ManyToManyField创建的表。我只想选择与单个用户相关的那些ManyToManyField的行。
假设管理员创建了一个ID为"3383"的收费项目,并从MultiSelectWidget中选择了五个农场。在这五个农场中,用户“Mike”拥有两个农场。ManyToManyField表会为这五个农场创建5行数据,其中包括“Mike”农场的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
mike = Farm.objects.get(farmNo="Mike")
for charge in mike.charge_set.all():
print charge.chargeId
查看一下关于多对多关系的模型字段文档。你可以把“charge_set”这个属性的名字改成其他的,比如“charges”。只需要在你的Charge模型的多对多声明中加上related_name="charges"就可以了。
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)