2013-04-06 72 views
0

我試圖設計一些Django模型,官方文檔和Stack Overflow都沒有得到答案。我可以在同一個Django模型中引用一個字段嗎?

問題出在學生模式中:學生有英文名和非英文名(例如中文)。然而,他們往往更喜歡被稱爲一個或另一個,而且,他們的父母稱他們爲一個或另一個(有時家長有不同的偏好:)

我想存儲這種偏好在學生模型。現在我正在存儲一個文本值,指示學生和家長的首選名稱:

class Student(models.Model): 
    ENGLISH_NAME = 'E' 
    OTHER_NAME = 'O' 

    PREFERRED_NAME_CHOICES = (
     (ENGLISH_NAME, 'English Name'), 
     (OTHER_NAME, 'Other Name (any language)'), 
    ) 
    PREFERRED_NAME_FIELDS = { 
     ENGLISH_NAME: 'first_name_english', 
     OTHER_NAME: 'first_name_other', 
    } 

    first_name_english = models.CharField(max_length=50) 
    first_name_other = models.CharField(max_length=50) 
    child_preferred_name = models.CharField(max_length=1, choices=PREFERRED_NAME_CHOICES) 
    parent_preferred_name = models.CharField(max_length=1, choices=PREFERRED_NAME_CHOICES) 

我認爲這很醜陋。除了在數據庫中存儲一些值之外,是否有更好的方法來引用同一模型中的字段?

謝謝:)

+0

我只是保持簡單,並將標誌存儲在'child_preferred'和'parent_preferred'中 - 就像您聲明的那樣。如果您將冗餘數據存儲在數據庫中,則表明您做錯了什麼。 – karthikr 2013-04-06 02:12:32

回答

1

這是最好的,因爲它得到!

你可以在這裏做的一個改進是使用BooleanField s,因爲你只存儲一個標誌,而不是實際上比單個字符大得多的1個字符的文本值。

+0

好的,謝謝!我絕對不想存儲冗餘數據(如karthikr提到的)。我想我現在就去看看,但我認爲使用BooleanField是一個好主意。乾杯:) – 2013-04-08 23:40:52

相關問題