Добавление вопросов безопасности на мой сайт Django - PullRequest
2 голосов
/ 19 марта 2012

Мне нужно задать пользователю два секретных вопроса и соответствующие ответы. Вопросы безопасности будут предоставлены мной, поэтому это будет что-то вроде <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), которое является отношением ManyToMany к SecurityQuestion, и ограничение числа 2 в регистрационной форме?
  • Наличие двух полей (question1 и question2), каждое из которых имеет значение от ForeignKey до SecurityQuestion?

1 Ответ

4 голосов
/ 19 марта 2012

Я бы предпочел создать отдельную модель для всех вопросов безопасности. Это дает вам гибкость.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...