2017-12-06 12 views
0

私は教師と学生のモデルを持っています。私が学生を作り、同じ名前とメールと教材を持った教師を作り直すと、それは創造されます。大学の同じ人の教師と学生になることはできません。残りのAPIでどのように申請するのですか?djangoで同じ名前の異なるタイプのユーザの認証?

答えて

0

要件や好みに応じて、これを解決する方法はいくつかあります。

1つの方法では、データベースレベルの制約があります。この場合、ステータスに関係なくすべての人とモデルを作成し、生徒と教師の間で区別する追加のブール値フィールドを追加する必要があります。これは、次のようになります。

class People(models.Model): 

    email = models.EmailField(unique=True) 
    is_teacher = models.BooleanField() 

uniqueは、電子メールは、テーブル全体で一意でなければならないことを意味し、あなたが同じ電子メールで他の人を追加しようとした場合、IntegrityErrorが発生します。

このようにunique_togetherでいくつかのフィールドで一意に使用する可能性もあります。

class People(models.Model): 

    first_name = models.CharField(max_length=100) 
    last_name = models.CharField(max_length=100) 

    class Meta: 
     unique_together = (('first_name', 'last_name'),) 

これは、first_nameとlast_nameが一緒に一意でなければならないことを意味します。

もう1つの方法は、学生または教師がすでにfilter()exists()で保存する前に、どちらかのテーブルにあるかどうかを確認することです。

teacher_exists = Teacher.objects.filter(teacher=something).exists() 
student_exists = Teacher.objects.filter(student=something).exists() 

exists()クエリセットに結果が含まれている場合はTrueを、そうでない場合はFalseを返します。

+0

問題は教師と学生の2つの異なるテーブルがあることです。だから、フィルタリングによる2番目の方法は便利でしょうか? – phantom

+0

誰かがいずれかのテーブルに人を追加しようとすると、その人物が既に学生テーブルまたは教師テーブルに入っているかどうかをチェックしてエラーメッセージを返すか、人を救います。 – Borut

関連する問題