簡體   English   中英

有什么辦法可以在 Django 中對模型內部進行過濾嗎?

[英]Is there is any way I can make filtering inside models in Django?

我創建自定義 Account 模型並添加視圖列,如is_student, is_teacher 所以我在另一個應用程序中創建了另一個類,所以我如何在模型中過濾類似的東西。

帳戶應用模型.py

class Account(AbstractBaseUser):
    email                   = models.EmailField(verbose_name="email", max_length=60, unique=True)
    username                = models.CharField(max_length=30, unique=True)
    date_joined             = models.DateTimeField(verbose_name='date joined', auto_now_add=True)
    last_login              = models.DateTimeField(verbose_name='last login', auto_now=True)
    is_admin                = models.BooleanField(default=False)
    is_active               = models.BooleanField(default=True)
    is_staff                = models.BooleanField(default=False)
    is_superuser            = models.BooleanField(default=False)
    is_student              = models.BooleanField(default=False)
    is_teacher              = models.BooleanField(default=False)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username']

    objects = MyAccountManager()

主應用模型.py

from accounts.models import Account
a = Account.objects.filter(is_student=True)
class Students(models.Model):
    student = models.ManyToManyField(a, on_delete=models.CASCADE)

我想要的是在學生表和帳戶之間建立關系

(只有那些 is_student = True)

甚至不要認為這是可能的。 表存在於數據之前。 所以你創建表,然后插入數據。 您可以決定在哪些數據之后插入。
並且不要將您的表格命名為復數: Students

這是一個解決方案:

class Student(models.Model):
    # this means a student can have many accounts and an account can be linked with many students 
    account = models.ManyToManyField(Account, related_name="students", on_delete=models.CASCADE)

與許多學生關聯的帳戶可能不太好。
我會做:

class Student(models.Model):
    # this means a student can only have one  account and an account can only be linked with one student
    account = models.OneToOneField(Account, related_name="student", on_delete=models.CASCADE)

如果您想獲得活躍用戶,只需在您的視圖中執行以下操作:

active_students = Student.objects.filter(account__is_active=True)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM