Django模型:访问子模型字段的父模型

时间:2017-03-09 04:44:57

标签: django django-models

我有以下型号

from django.contrib.auth.models import User

User = settings.AUTH_USER_MODEL    

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')

class Tutor(UserProfile):
   # tutor_fields here

从用户对象如何访问Tutor?是user.profile吗?

user.profile.select_related('tutor')似乎不起作用。

2 个答案:

答案 0 :(得分:1)

OneToOneField的工作方式与ForeignKey不同,unique=True除外,您不需要指定related_name(您可以指定是否要更改它)。< / p>

对于你的例子:

from django.contrib.auth.models import User

User = settings.AUTH_USER_MODEL    

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')

class Tutor(UserProfile):
    user = models.ForeignKey(UserProfile, on_delete=models.CASCADE, related_name='tutor')
    details = models.CharField(max_length=100)

注意:如果您想要/需要一个ForeignKey Tutor,请使用UserProfile,否则如果您想要一个Tutor UserProfile Tutor UserProfile 1}}

您可以UserProfile.tutor.details访问db.execSQL("CREATE TABLE EMPLOYEES(EMPID INTEGER PRIMARY KEY AUTOINCREMENT, LI_USERNAME TEXT UNIQUE, LI_PASSWORD TEXT);"); db.execSQL("CREATE TABLE PASSWALL(PWID INTEGER PRIMARY KEY AUTOINCREMENT, PW_DESC TEXT UNIQUE, PW_PASS TEXT, PW_NOTE TEXT);"); db.execSQL("CREATE TABLE NOTEPAD(NPID INTEGER PRIMARY KEY AUTOINCREMENT, NP_TITLE TEXT UNIQUE, NP_BODY TEXT, NP_DATE TEXT);"); 发布 function change_function(element){ document.location.href = element.value }

答案 1 :(得分:0)

正如in the django docs所述,您应该可以使用user.user_profile访问它。