2012-01-12 11 views
0

私は車の広告のウェブサイト を作成したいと私は今年のような多くのリストを持って、リスト で最高のユースカテゴリまたは選択肢であると考慮に私のしたいを取るブランド、ステータスこれは最も良いForeignKeyか選択肢ですか?違いは何ですか?

は、拡張検索エンジンを作る

牽引法

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

使用することは事実上静的です:彼らは変更されていないか、頻繁に変更しないで、自分で何かを "行う"必要はありません。

ForeignKeyは、そのフィールドの「選択肢」が動的(任意の瞬時に変化する可能性がある)または追加のデータをそれらの「選択肢」に関連付ける必要がある場合に使用します。

ただし、「年」と「ステータス」の両方がchoicesを使用するのに適しています。新車、中古車など、自動車の「状態」の定義された数は決まっています。choicesを使用すること自体が良い考えです。しかし、私はそれを次のように変更したいと考えています:

YEAR_CHOICES = [(y, y) for y in range(1990, datetime.now().year+2)] 

ここで、 "1990"はあなたが使いたい年です。 datetime.now().yearは現在の年を取得しており、rangeはend-inclusive(まではまで返されますが、最後の数字は返されません)、ここでモデル年を扱っているようです(現在の年より1大きい)合計2でそれを増やす必要があります。

+0

おかげでクリスプラット –

0

選択肢があなたのために仕事をするときに、なぜ外部キー関係を定義したいのですか?私は選択肢の方法で行くだろう

+0

あなたのご意見ありがとうございます。 –