Python 如何创建具有不同用户类型的帖子(一个帖子模型有两个外键)?
我正在做一个项目场景:Python 如何创建具有不同用户类型的帖子(一个帖子模型有两个外键)?,python,django,database,django-rest-framework,foreign-keys,Python,Django,Database,Django Rest Framework,Foreign Keys,我正在做一个项目场景:老师可以制作课程并在课程模型中发布,学院也可以在课程模型中制作课程? 如何使其自动选择外键字段之一? 学院和教师都可以有职位 class Institute(models.Model): courses = GenericRelation(Course) institute_name = models.OneToOneField(CustomUser,on_delete=models.CASCADE) institute_id = models.Sl
老师可以制作课程并在课程
模型中发布,学院也可以在课程
模型中制作课程?
如何使其自动选择外键
字段之一?
学院和教师都可以有职位
class Institute(models.Model):
courses = GenericRelation(Course)
institute_name = models.OneToOneField(CustomUser,on_delete=models.CASCADE)
institute_id = models.SlugField(unique=True,default=slug_generator(),blank=True)
phone_number = models.CharField(max_length=11)
locations = models.OneToOneField(Location,on_delete=models.DO_NOTHING,default='')
institute_name.is_institute = True
pass...
def __str__(self):
return self.institute_name.username
class Teacher(models.Model):
course = GenericRelation(Course)
teacher = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
teacher_slug = models.SlugField(unique=True,default=slug_generator())
phone_number = models.CharField(max_length=11,default='')
teacher.is_teacher = True
certification = models.ForeignKey(Certification,on_delete=models.CASCADE, blank=True,null=True)
def __str__(self):
return self.teacher.username
class CustomUser(AbstractUser):
is_student = models.BooleanField(default=False)
is_teacher = models.BooleanField(default=False)
is_institute = models.BooleanField(default=False)
email = models.EmailField(unique=True)
objects = UserManager()
def __str__(self):
return self.username
class Student(models.Model):
student = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
student.is_student = True
student_slug = models.SlugField(unique=True,default=slug_generator())
def __str__(self):
return self.student.username
然后定义:
如果user.is\u institute中的用户登录
因此,在研究所模型中进行查询
else loggedin in user.is_teacher
然后将研究教师模型。
这个结构好吗
我听说通用外键
不使用API
我也试过这个,但我不知道如何查询它们
class Course(models.Model):
course_name = models.CharField(max_length=20)
tags = models.ManyToManyField(Category)
time_created = models.DateTimeField(auto_now_add=True)
content_type = models.ForeignKey(ContentType , on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type','object_id')
def __str__(self):
return self.course_name
from django.contrib.contenttypes.models import ContentType
Teacher ,Institute have different fields name
谢谢我不认为一般关系是你真正需要的
稍微改变一下结构怎么样。让我们将课程
作为任务的主要模型
比如说
class Course(models.Model):
teacher = models.ForeignKey(Teacher, related_name='courses', on_delete=models.CASCADE, null=True, blank=True)
institute = models.ForeignKey(Institute, related_name='courses', on_delete=models.CASCADE, null=True, blank=True)
# other necessary fields
@property
def is_teacher(self):
return self.teacher is not None
@property
def is_institute(self):
return self.institute is not None
之后,您可以检查课程是否由
如果课程对象是教师:
但是如果你真的想通过学院或老师来区分你的用户,你需要定制用户模型,这里是你的出发点
在这种情况下,在你的课程
模型中,你只有一个类似作者=models.ForeignKey(User,related\u name='courses',on\u delete=models.CASCADE)
希望我没有弄错你的问题。那么,对于这些类型的项目,解决方案是什么?