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