在Django中访问通过ManyToManyField创建的表数据

0 投票
2 回答
642 浏览
提问于 2025-04-17 00:23

我有一个模型文件,用户可以拥有任意数量的农场,而管理员可以创建收费项目并将其放在一个或多个农场上。现在的问题是,我想访问在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)

撰写回答