我正在一个简单的网站上工作。有一些大师从某个列表中提供服务,由管理员创建和维护。任何给定的 master 都可以提供服务的子集,他可以只提供一次给定的服务或根本不提供给定的服务,并且以一定的价格这样做。这是我到目前为止所拥有的,这很明显:
class Service(models.Model):
name = models.CharField(max_length=200)
class Master(models.Model):
name = models.CharField(max_length=200)
services = models.ManyToManyField(Service, through='MasterService')
class MasterService(models.Model):
master = models.ForeignKey(Master)
service = models.ForeignKey(Service)
price = models.PositiveIntegerField(blank=True, null=True) # masters can avoid listing the exact price if they want
class Meta:
unique_together=("master", "service")
但是,当我在视图中显示 master 时,我想列出所有可用的服务——包括那些给定 master 没有提供的服务,并附上适当的注释。实现此功能的最佳方法是什么?
我有这些可能的解决方案:
在查看器中创建一个特殊的助手类,它由 MasterService 和一个特殊的布尔值组成,该布尔值指示该服务是否可用。每次调用某个 master 的视图时,为每个可能的服务编写此类的对象列表。看似简单但不优雅。
在 MasterService 类本身中创建这个特殊的布尔字段。这样,我将不得不为任何 Master*Service 组合创建并保存在数据库 MasterService 对象中,这似乎太过分了。
将所有可用服务传递到主视图模板并在模板中对其进行迭代,检查它们中的每一个是否存在于 master.masterservice_set 中。似乎是最好的方法,但我不明白如何使用 django 的模板系统来做到这一点。
PS:我不仅寻求如何实现该功能的可能解决方案,而且希望学习与 django 和 python 意识形态相关的最佳方法,这对我来说似乎仍然很陌生。