如何在Django中处理不同的创建者类型模型?

oiopk7p5  于 2023-08-08  发布在  Go
关注(0)|答案(3)|浏览(103)

假设我有Profile、Post、Teacher和Student Django模型,我创建了Profile模型来共享Teacher和Student的公共字段。

*问题: 在post模型中表示创建者关系的正确方法是什么?如果我下面的代码正确,当我从post creator获取配置文件示例时,我如何识别配置文件的类型,我的意思是它是教师还是学生?**:

class Profile(models.Model):
    user = models.OneToOneField(User)
    .
    .

class Post(models.Model):
    .
    creator = models.ForeignKey(Profile, on_delete=models.CASCADE)
    .

class Teacher(models.Model):
    .
    profile = models.OneToOneField(Profile)
    .

class Student(models.Model):
    .
    profile = models.OneToOneField(Profile)
    .

字符串

wmvff8tz

wmvff8tz1#

您的数据库设计和模型关系并不真正符合,首先,您需要将您的Portfile重命名为Profile,然后在自定义学生模型中,您确保您声明了所需的字段,然后添加它作为POST的外键创建者,然后为教师。您需要添加额外的权限给您的用户,以便您将教师视为管理员...因此,您可以只创建自定义用户模型,然后添加必要的权限给教师...更多的澄清我总是在线帮助。通过watsap或dm联系我08082182438

watbbzwu

watbbzwu2#

为了区分教师和学生配置文件,可以通过组合related_namehasattr来处理:

class Teacher(models.Model):
    .
    profile = models.OneToOneField(Profile, related_name='teacher')
    .

class Student(models.Model):
    .
    profile = models.OneToOneField(Profile, related_name='school')
    .

字符串
然后从post creator示例中获取配置文件类型,如下所示:

profile = post.creator

if hasattr(profile_instance,'teacher'):
    teacher = profile.teacher
elif hasattr(profile_instance,'student'):
    student = profile.student

u0njafvf

u0njafvf3#

USER_ROLES = (
        ('Teacher', 'Teacher'),
        ('Student', 'Student'),
    )

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    role = models.CharField(choices=USER_ROLES, max_length=10)

字符串

在视图中,您可以这样实现该功能

创建学生档案:

student_profile = Profile.objects.create(user=student_user, role='Student')

#Now creating post instance for particular user_type
my_post = Post.objects.create(creator=student_profile, <here your other attributes>)

同样,也可以为其他user_type

相关问题