将模型与python对象相关联

时间:2018-01-08 20:30:03

标签: python django django-models

我有一些代码,我已经定义了一些Python模型。

例如:

class Store(object):
    '''
    The store object... Should it be a Django model?
    '''

    def __init__(self, *args, **kwargs):
        self.name = kwargs['name']
        self.id = kwargs['id']

    def __str__(self, *args, **kwargs):
        return self.name


kittenstore = Store(name='kittenstore', id=1)
dogstore = Store(name='dogstore', id=2)

stores_list = [kittenstore, dogstore]

class Stores(object):
    def __init__(self, *args, **kwargs):
        self.stores = stores_list

    def get_choices(self):
        store_choices = ()
        for store in self.stores: 
            store_choices+= ((store.id, store.name),)
        return store_choices

我想从另一个Django模型中引用这些商店。

我可以使用带有choices = get_choices()的models.Integerfield,但是当我在相关模型中进行过滤时,我总是返回id,如果我想在我的代码中使用它,我需要找到相关商店。

是否没有(python)技巧来取回Store对象而不是id?

也许使用自定义字段?

1 个答案:

答案 0 :(得分:0)

“从另一个模型引用这些商店”意味着这些模型之间应该存在某种(逻辑)关系。这通常通过使用外键连接模型来描述。

换句话说,你可以尝试这样的事情:

from django.db import models

class Store(models.Model):
    name = models.CharField(max_length=50)
    id = models.CharField(max_length=5)

    def __str__(self):
        return 'Store is named: %s' % self.name

class Stores(models.Model):
    store = models.ForeignKey(Store, on_delete=models.CASCADE)

    def __str__(self):
        return "Stores is at %s store" % (self.store)

创建商店并保存:

kittenstore = Store(name='kittenstore', id='1')
kittenstore.save()

实例化您的商店:

st = Stores(id=None, store=kittenstore)
st.save()

现在您可以像这样访问您的商店对象:

st.kittenstore

我在此示例中使用的关系是多对一关系。您应该通过查看有关模型relationship的Django文档来确定最适合您需求的关系。

***编辑***如果您的意思是通过模型的属性关联它们,那么您可以将模型属性分配给类的实例。有关此问题的相关示例,请查看this