我有一个Django模型,其中包含以下字段。
我想获得有关向这些模型动态添加某些属性的优缺点的建议(基于一些依赖于来自用户会话的实时信息的计算)。
我对目前的实施情况感到满意,但我对某些方面的长期影响感到担忧。 它被认为是一个糟糕的设计模式?在这种情况下,有哪些替代方案可以更干净地做到这一点? 在模板标签中进行计算是否更清晰?
也许把这个逻辑放在经理人身上?代理模型? 我认为这样做是属性,但计算取决于请求对象,因此必须以某种方式在视图中完成。
非常感谢。
class Printer(TimeStampedModel):
user = models.ForeignKey(
User)
minimal_cost = models.IntegerField()
active = models.BooleanField(default=True)
def some_view(request):
for printer in printer_list:
printer.distance = printer.distance_point(user_point)
printer.materials_costs = MaterialsCosts(printer, cart=cart)
printer.minimum_price = printer.materials_costs.minimum_printer_price()
答案 0 :(得分:1)
您可以将计算方法移动到models.py,不应直接在视图中执行此类计算。
class Printer(TimeStampedModel):
user = models.ForeignKey(
User)
minimal_cost = models.IntegerField()
active = models.BooleanField(default=True)
@classmethod
def set_my_attrs(cls):
printer_list = cls.objects.all() #Im assuming that you need all the printers for your calculations
for printer in printer_list:
printer.distance = printer.distance_point(user_point)
printer.materials_costs = MaterialsCosts(printer, cart=cart)
printer.minimum_price = printer.materials_costs.minimum_printer_price()
printer.save() # dont forget saving :)
然后在你的views.py
中def some_view(request):
Printer.set_my_attrs()