我想要创建汽车广告网站 我有许多名单,如年份,品牌和状态
这是最好用的类别或选择列表 并考虑到我想制作扩展搜索引擎
查看牵引方法的代码
YEARS = (
("1990", "1990"),
("1991", "1991"),
("1992", "1992"),
.
.
.
.
("2013", "2013"),
)
class Whatever(models.Model):
# Show a list with years
birthdate = models.IntegerField(max_length=2, choices=YEARS)
#OR this method
class ChoiceYears(models.Model):
type = models.CharField(max_length=60)
def __unicode__(self):
return '%s' % self.typeclass Adv(models.Model):
class Adv(models.Model):
years = models.ForeignKey(ChoiceYears)
和这个
class ChoiceStatus(models.Model):
type = models.CharField(max_length=60)
def __unicode__(self):
return '%s' % self.type
class Adv(models.Model):
status = models.ForeignKey(ChoiceStatus)
#OR this method
STATUS = (
(1, u'new'),
(2, u'old'),
)
class Adv(models.Model):
status = models.IntegerField(u'??????', choices=STATUS, default=1,)
答案 0 :(得分:3)
当项目几乎是静态时,使用choices
是合适的:它们不会改变或不经常更改,也不需要自己“做”任何事情。
当该字段的“选项”是动态的(可能随时或随心所欲地改变)或者您需要将其他数据与这些“选择”相关联时,请使用ForeignKey。
但是,出于您的目的,“年”和“状态”都是使用choices
的合适人选。只有一定数量的汽车“状态”:新的,使用过的等等。年份不适合作为自己的模型,因此使用choices
也是个好主意。但是,我会将其更改为:
YEAR_CHOICES = [(y, y) for y in range(1990, datetime.now().year+2)]
“1990”是您想要开始的年份。 datetime.now().year
可以获得当前年份,因为range
不是最终包含(它返回最多而不是最后一个数字)并且您似乎正在处理模型年在这里(比当前年份大1),你必须总计增加2。
答案 1 :(得分:0)
为什么在选择为您完成工作时,您想要定义外键关系?我会选择方式