我正在开发一个简单的网站。有些主人从某个列表中提供服务,管理员创建和维护这些服务。任何给定的主人都可以提供服务的子集,他可以只提供一次给定的服务或者根本不提供服务,并且以特定的价格提供服务。这是我到目前为止所做的,很明显:
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")
但是当我在视图中呈现主人时,我想列出所有可用的服务 - 包括那些给予主人没有提供的服务,并提供适当的评论。实现此功能的最佳方法是什么?
我有这些可能的解决方案:
在查看器中创建一个特殊的帮助器类,它由MasterService和一个特殊的布尔值组成,它指示该服务是否可用。每次调用某个主服务器的视图时,为每个可能的服务组成此类的对象列表。看似简单但不优雅。
在MasterService类本身中创建这个特殊的布尔字段。这样我就必须在数据库MasterService对象中为任何Master * Service组合创建并保存,这看似过多。
将所有可用服务传递到主视图模板中,并在模板中迭代它们,检查它们是否存在于master.masterservice_set中。似乎是最好的方法,但我不明白如何使用django的模板系统来做到这一点。
P.S。:我不仅寻求可能的解决方案如何实现这一功能,还希望学习与django和python意识形态相关的最佳方式,这对我来说仍然很陌生。
答案 0 :(得分:0)
https://docs.djangoproject.com/en/dev/misc/design-philosophies/ 和
import this
从解释器中获取python哲学。
这就是哲学。
如果可以在一个函数中完成,则创建一个类可能很重。不是很优雅,你说的。 创建一个存储的布尔...过多,你说的。
然后是第三个命题。足够近! “主视图模板” 如果你想用一些检查进行迭代,它就在'视图'中,逻辑允许它。不在模板中,即模板,不是数据处理,它接收处理过的数据只是为了显示它。