2012-03-18 18 views
2

我需要問用戶的兩個安全問題及其相應的答案。安全問題將由我提供,因此它會是某種<select>。我創建了一個模型來存儲名爲UserProfile的用戶配置文件。它看起來像:將安全問題添加到我的Django站點

class UserProfile(models.Model): 
    phone1 = models.CharField(help_text='Primary phone number') 
    phone2 = models.CharField(help_text='Secondary phone number', blank=True) 
    ... 

我可以這樣做:

SECURITY_QUESTIONS_CHOICES = (
    ('PN', 'What is your telephone number?'), 
    ('BF', 'What is the full name of your best friend?'), 
    ... 
    ) 

與以下兩個字段添加到我的模型:

question1 = models.CharField(choices=SECURITY_QUESTIONS_CHOICES) 
question2 = models.CharField(choices=SECURITY_QUESTIONS_CHOICES) 

,但我希望能夠修改安全問題列表,所以我希望它也是一個模型。

我的問題是:

什麼是具有兩個域指向同型號的最佳方式?

  • 的只有一個字段(例如。questions),這是一個多對多關係SecurityQuestion,並限制對在登記表的數量?
  • 有兩個字段(question1question2),其中每個字段是ForeignKeySecurityQuestion

回答

4

我寧願爲所有安全問題創建一個單獨的模型。它給你靈活性。

class SecurityQuestions(models.Model): 
    class Meta: 
     db_table = 'security_questions' 
    id = models.AutoField(primary_key=True) 
    question = models.CharField(max_length = 250, null=False) 

class UserProfile(models.Model): 
    ---- 
    ---- 
    user_questions = models.ManyToManyField(SecurityQuestions, through='SecurityQuestionsInter') 


class SecurityQuestionsInter(models.Model): 
    class Meta: 
     db_table = 'security_questions_inter' 

    profile = models.ForeignKey(Profile) 
    security_questions = models.ForeignKey(SecurityQuestions) 
    answer = models.CharField(max_length = 250, null=False) 
+0

好主意。我只需要確保(通過表單)用戶總是有2個問題。 – 2012-04-04 05:44:23

+1

請記住,這些答案必須存儲在一個安全的哈希中,就像密碼一樣,因爲如果數據庫受到威脅,它們可以讓您訪問某人的帳戶。 – 2012-12-10 21:00:20

+0

@TimSaylor是的,你是絕對正確的。謝謝 – 2012-12-11 06:50:35

相關問題