Django模型中的动态字段

时间:2015-01-20 00:49:24

标签: django dynamic

我有一个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()

1 个答案:

答案 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()