【发布时间】:2018-12-16 12:10:30
【问题描述】:
如何设置模型装饰器(在 Django 中)来计算 ManyToManyFields(和其他可验证的条件)?
Django 模型:
class Cake(models.Model):
cake_layer = models.ManyToManyField(CakeLayer, related_name="cake_layer")
cream_layer = models.ManyToManyField(CreamLayer, related_name="cream_layer")
@property
def at_least_one_cake_layer(self):
if self.cake_layer_set.count = 0:
raise AssertionError("At last one cake layer is needed to be a cake")
@property
def at_least_two_layers(self):
total_layer_count = 0
total_layer_count += self.cream_layer_set.count
total_layer_count += self.cream_layer_set.count
if total_layer_count <= 1:
raise AssertionError("A proper Cake needs two layers, even if they are just two cake layers!")
是否像在模型本身中进行查询一样简单? (我只在模板和视图中使用查询,如果它们是另一个模型,我不确定如何正确(如果有的话)访问模型的属性。
请注意:如果这段代码可以工作,请告诉我,但这样你就知道我来自哪里:
- 我正在根据我所学的内容重新编写应用程序架构,并尝试抽象一些内容以消除重复,并进入通用外键 (GFK)/多表继承/多对多架构,并且正在尝试不同的东西,我不确定我想尝试的方法是否可行
- 按照阅读this 的建议,我正在尝试避免使用 GFK
- 我假设使用装饰器可以使用一些数据库级别的逻辑,(尽管我也会提供视图级别的业务逻辑),虽然不确定这是
pythonic还是处理高度抽象/复杂相关类时的良好架构
请随时澄清我的假设 :) 谢谢!
【问题讨论】:
标签: python django python-decorators