如何列出在其他表中不是fk的对象

2024-09-28 21:32:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个表Users,用户可以在Student表或Teacher表中

如何只列出不在这两个表中的用户

表名是葡萄牙语的,但它们分别对应于User、Teacher和Student

qs = models.Users.objects.all('')

class Usuario(AbstractBaseUser,PermissionsMixin):
    Nome = models.CharField('Nome Completo', max_length=100)
    User = models.CharField('Usuario',max_length=20, unique=True)
    email = models.EmailField('Email',unique=True)
    Data_Associacao = models.DateTimeField(default=timezone.now)
    is_active = models.BooleanField('Ativo',default=True)
    is_staff = models.BooleanField(default=False)

    USERNAME_FIELD = "email"
    REQUIRED_FIELDS = ["Nome", "User"]
    objects = UserManager()

    def __str__(self):
        return self.Nome
    def get_short_name(self):
        return self.User

class Professor(models.Model):
    Matricula = models.CharField(primary_key=True, max_length=8)
    Usuario = models.OneToOneField(settings.AUTH_USER_MODEL)
    Data_Nascimento = models.DateField('Data de Nascimento')
    Endereco = models.TextField(max_length=200)

    def __str__(self):
        return self.Usuario.Nome


class Aluno(models.Model):
Matricula = models.CharField(primary_key=True, max_length=8)
Usuario = models.OneToOneField(settings.AUTH_USER_MODEL)
Data_Nascimento = models.DateField('Data de Nascimento')
Endereco = models.TextField(max_length=200)
Turma = models.ForeignKey(Turma)

def __str__(self):
    return self.Usuario.Nome

def clean(self, *args, **kwargs):
    try:
        super(Aluno, self).save(*args, **kwargs)
    except ValidationError:
        raise ValidationError("Não há vagas nesta turma !")

Tags: selftruedefaultdatareturnmodelsdeflength
1条回答
网友
1楼 · 发布于 2024-09-28 21:32:22
professor = Professor.objects.values_list('Usuario_id', flat=True).all()
aluno = Aluno.objects.values_list('Usuario_id', flat=True).all()

users = list(set(professor + aluno))
user_list = Usuario.objects.exclude(pk__in=users)

因此user_listvar拥有不在另外两个表中的所有用户

相关问题 更多 >