Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database Django,将用户与另一个表关联_Database_Django_Model_Relationship - Fatal编程技术网

Database Django,将用户与另一个表关联

Database Django,将用户与另一个表关联,database,django,model,relationship,Database,Django,Model,Relationship,所以我得到了你可以在下图中看到的表格: 我想做的是创建一个关系,这样每个用户(djangoauth_user)都将被注册(或能够注册)到一个“课程”,这样他就能够看到自己模块的下一个事件 我是否必须创建另一个表并放置2个外键,或者这是在“php”中实现的一种方法,而使用Django更简单?有人建议我创建从“用户”继承的“学生”模型,并在auth上扩展行为和一对多关系。我尝试过这样做,但不幸的是没有结果,因为我对Django&Python非常陌生。我认为您可以采用以下两种方法之一 扩展用户模型

所以我得到了你可以在下图中看到的表格:

我想做的是创建一个关系,这样每个用户(djangoauth_user)都将被注册(或能够注册)到一个“课程”,这样他就能够看到自己模块的下一个事件


我是否必须创建另一个表并放置2个外键,或者这是在“php”中实现的一种方法,而使用Django更简单?有人建议我创建从“用户”继承的“学生”模型,并在auth上扩展行为和一对多关系。我尝试过这样做,但不幸的是没有结果,因为我对Django&Python非常陌生。

我认为您可以采用以下两种方法之一

  • 扩展用户模型。”“学生”可能是你新模型的好名字。它将与“用户”建立一对一的关系,与“课程”建立一种外键关系。它可以存储仅适用于学生的任何其他信息。有关如何执行此操作的文档可在此处找到

  • 创建与课程具有ForeignKey关系的自定义用户模型。这种方法稍微复杂一点,但最终结果会稍微干净一点。这方面的文档在这里

  • 抱歉,如果我只是把你送到Django文档,但是这两个部分都写得很好,应该解释得很清楚。如果您想发布另一个带有示例代码的问题,我们可以尝试看看您最初扩展用户模型的尝试为何无效。顺便说一句,您的“学生”模型不必继承用户模型来扩展它。

    如果每个授权用户(或授权用户)都将或有机会注册一门课程,我将创建一个与django用户模型具有1对1关系的“用户配置文件”模型。您可以在此模型中存储其他用户数据,包括他们注册的课程。有关更多详细信息,请参见,但以下是一个示例:

    class UserProfile(models.Model):
        user = models.OneToOneField('auth.User')
        course = models.ForeignKey('courseapp.Course', null=True)
    
    您可能需要创建一个信号,该信号在每次保存auth.User对象时触发,这样,如果是第一次保存该用户对象,它将自动创建UserProfile:

    from django.contrib.auth.models import User
    from django.db.models.signals import post_save
    from yourusersapp.models import UserProfile
    
    def create_user_profile(sender, instance, created, **kwargs):
        # Automatically creates a UserProfile on User creation.
        if created:
            UserProfile.objects.create(user=instance)
    
    post_save.connect(create_user_profile, sender=User)
    
    查询用户对象时,可以引用用户对象的配置文件,如:

    user_object.userprofile
    
    然后,您可以创建一个课程对象,并通过其UserProfile间接将user_对象链接到该课程:

    course = Course.objects.create(name='course_name', next_field='whatever')
    user_profile = user_object.userprofile
    userprofile.course = course
    userprofile.save()
    
    现在您有了一个用户对象,它的用户配置文件只链接到一个课程。许多用户可以参加同一课程,但一个用户只能参加一个课程。您还可以引用特定课程中的所有用户,如:

    course = Course.objects.get(name='course_name')
    course_users = course.userprofile_set.all()
    

    HTH

    问题是,我不会向用户模型添加任何额外字段,因此我不确定创建自定义用户模型是否是个好主意。那么第一种方法对我来说更好?另外,因为将来我可能会加上“教师”,所以遵循第一种方式不是更好吗?对不起,我把你弄糊涂了。是的。我认为目前第一种方法对您来说是更简单(更好)的方法。尤其是如果您是Django/Python新手。一旦“学生”对象开始工作,添加“教师”对象应该足够简单。太好了!那我就走第一条路!谢谢!我会告诉你结果的!回答了我自己的问题,它应该驻留在
    models.py
    中,正如@Raisins的回答中所指出的。