我有一些代码,我已经定义了一些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?
也许使用自定义字段?
答案 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。