我想要创建汽车广告网站我有很多清单,比如年份、品牌和状态
哪一个是最常用的类别或带有列表的选项考虑到我想做的扩展搜索引擎
参见两种方法的代码
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,)
当项目实际上是静态的时,使用choices
是合适的:它们不会更改或不经常更改,也不需要自己"做"任何事情。
当该字段的"选项"是动态的(可能随时或一时兴起发生变化),或者您需要将其他数据与这些"选项"关联时,请使用ForeignKey。
但是,出于您的目的,"年份"one_answers"状态"都是使用choices
的好候选者。只有一定数量的汽车"状态":新车、二手车等。年份不适合作为自己的车型,因此使用choices
也是一个好主意。然而,我会把它改成类似于:
YEAR_CHOICES = [(y, y) for y in range(1990, datetime.now().year+2)]
"1990"是你想要开始的年份。datetime.now().year
为您提供当前年份,由于range
不包含末尾(它返回直到,但不是最后一个数字),并且您似乎在处理此处的模型年份(比当前年份大1),因此必须将其总共增加2。
当选择为您服务时,为什么要定义外键关系?我会选择