0

我正在一个简单的网站上工作。有一些大师从某个列表中提供服务,由管理员创建和维护。任何给定的 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 意识形态相关的最佳方法,这对我来说似乎仍然很陌生。

4

1 回答 1

0

https://docs.djangoproject.com/en/dev/misc/design-philosophies/

import this

从解释器中获取 python 哲学。

那是为了哲学。

如果可以在一个函数中完成创建一个类可能会很繁重。不优雅,你说的。创建一个存储的布尔值...过多,你说的。

然后是第三个命题。足够接近!“主视图模板”如果您想通过一些检查进行迭代,它在“视图”中,逻辑允许它。不在模板中,它是数据的呈现而非处理,它接收处理后的数据只是为了显示它。

于 2013-08-27T23:32:07.070 回答