我需要向用户询问两个安全问题及其相应的答案。安全问题将由我提供,因此它将是某种<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 ? question1
和question2
),其中每个字段都是ForeignKey
到SecurityQuestion
?答案 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)