在django中动态创建字段

时间:2012-07-12 19:25:41

标签: python django tastypie composite-primary-key

我有两张桌子(比如父母和孩子)。我希望父和子使用外键相互链接。子表有两个字段,其中一个是'country_sig'。这个country_sig实际上是通过加入名为'country''code'父表中的两个字段组成的。 例如:如果国家/地区为“IN”且代码为“15”,则country_sig为 IN.15

现在我想在为父表创建django模型期间,它应该自动创建此字段country_sig 派生自'country'和'code',以便我可以将它引用到子表。

PS:由于父表非常大,我不想在从这两个字段派生的数据库中创建另一个字段,但我可以调整另一个表(子表)将country_sig字段分成两列使用'country'和'code'但由于django不支持复合主键,因此无效。

修改: 实际上我在tastypie中实现它,我想要tastypie认为它是一个真实的领域。这将解决我的真正问题。

1 个答案:

答案 0 :(得分:0)

也许不要使用标准的tasypie ModelResources,而是编写自己的资源:

class DictWrapper(object):
    '''
    to be used as generic tastypie resource object 
    '''
    def __init__(self, initial=None):
        self.__dict__['_data'] = {}

        if hasattr(initial, 'items'):
            self.__dict__['_data'] = initial

    def __getattr__(self, name):
        return self._data.get(name, None)

    def __setattr__(self, name, value):
        self.__dict__['_data'][name] = value

    def to_dict(self):
        return self._data

class ParentResource(Resource): 
    def get_object_list(self, request):        
        ret = []
        for parent in Parent.objects.all():
            ret.append(DictWrapper({"country_sig":"{0}.{1}".format(parent.country, parent.code})))
        return return

    def obj_get_list(self, request=None, **kwargs):      
        return self.get_object_list(request)