gpt4 book ai didi

带有大表的 Django M2M

转载 作者:行者123 更新时间:2023-12-04 18:19:49 26 4
gpt4 key购买 nike

我有一个典型的 M2M 场景,其中促销事件与我们的零售商有关。但是,我们有大量零售商(超过 10k),因此我无法使用普通的多选小部件。

我的目标是拥有一个带有“零售商”子页面的“事件”实例页面,该页面将有一个表格,列出当前与该事件相关的所有零售商。此外,每个零售商旁边都会有一个“删除”复选框,以便在必要时将其从列表中删除。 (当然,我还会有另一个搜索/结果页面,用户可以在其中选择他们想要添加到列表中的零售商,但我相信我可以自己解决这个问题)。

有人可以指出我关于模型表单和表单集工厂的正确方向,因为我不知道从哪里开始。直接操作 app_activity_related_retailers 表似乎很明显,但我认为我不能用现有的函数来做到这一点。是否有这样做的模式。

class Activity(models.Model):
budget = models.ForeignKey('Budget')
activity_type = models.ForeignKey('ActivityType')
amount = models.DecimalField(max_digits=8, decimal_places=2)
associated_retailers = models.ManyToManyField('Retailer', related_name='associated_retailers')

class Retailer(models.Model):
name = models.CharField(max_length=50)
address01 = models.CharField(max_length=50)
address02 = models.CharField(max_length=50, blank=True)
postcode = models.CharField(max_length=5)
city = models.CharField(max_length=20)

最佳答案

全部 ManyToManyField s 有一个 through模型,无论您是否自己定义。在你的情况下,它会有一个 id , 一个 activity字段和 retailer field 。您可以通过 Activity.associated_retailers.through 访问该表- 一种“明显”的方法是将其作为“模型”公开,例如

ActivityRetailer = Activity.associated_retailers.through

您现在可以像操作任何 ol' Django 模型一样操作这些关系,因此您可以生成查询集,例如
retailer_records_for_activity = ActivityRetailer.objects.filter(activity_id=1234)

...并且您还可以为这些伪模型创建模型表单集(如果已配置,则带有 delete 复选框)。

关于带有大表的 Django M2M,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51327551/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com