2016-11-15 56 views
2

我有一个问题,我一次又一次地使用相同的代码(保存项目,而不是该项目的项目事务)。模型管理器中的Django动态查询

所以我想也许我需要一个模型管理器,它会帮助我,而且我在Django中不是很有经验,所以我想知道你是如何处理这类问题的。

我的想法是创建像的InventoryManager:

class InventoryManager(models.Manager): 
    def create_item(self, **kwargs): 
     # 

    def create_item_trans(self, item, **kwargs): 
     pass 

    def create_item_with_trans(self, **kwargs): 
     # create item 
     # create item_trans 
     # return item with item_trans 

但在create_item_with_trans,我没有办法送 kwargs,导致** create_item acceps不同kwargs和create_item_transaction接受不同的** kwargs

回答

0

我想是这样的:

def create_item(self, **kwargs): 
    # kwargs = {'item_attr1': '', 'item_attr2': ''} 

def create_item_trans(self, item, **kwargs): 
    # kwargs = {'item_pk': 1, 'trans_attr1': '', 'trans_attr2': ''} 

def create_item_with_trans(self, **kwargs): 
    # kwargs = {'item_attr1': '', 'item_attr2': '', 'transaction': {'trans_attr1': '', 'trans_attr2': ''}} 

    trans_attrs = kwargs.pop('transaction') 
    item = self.create_item(**kwargs) 
    trans = self.create_trans(item_pk=item.pk, **trans_attrs) 
    # return item with item_trans 
+0

我也在思考这个像发送字典,如: '{“项目” {...}“item_trans”:{...}}' ,但我不知道这是正确的方式,非常感谢 – Jazzy

+0

你认为我应该在模型管理器上写这个,或者我应该创建一个单独的文件,哪里有我的帮助函数吗? – Jazzy

+1

我通常会在应用程序内部创建一个'managers.py',并将'models.Manager'的子类放在那里。不需要助手文件。 – lucasnadalutti