将安全问题添加到我的Django站点

时间:2012-03-18 23:00:53

标签: django django-models django-forms

我需要向用户询问两个安全问题及其相应的答案。安全问题将由我提供,因此它将是某种<select>。我创建了一个模型来存储名为UserProfile的用户配置文件。它看起来像:

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的ManyToMany关系,并且在注册表单中将数字限制为 2
  • 有两个字段(question1question2),其中每个字段都是ForeignKeySecurityQuestion

1 个答案:

答案 0 :(得分: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)