"self.fields['field_name'].queryset"在Django中,是否可以应用于OneToOne字段?
"self.fields['field_name'].queryset" in Djano, can it be applied to a OneToOne field?
我是 Django 的新手,一直在努力研究与 _set.all()
的 OneToOne 字段关系
我的models.py
class User(AbstractUser):
is_admin = models.BooleanField(default=False)
is_employee = models.BooleanField(default=True)
is_manager = models.BooleanField(default=False)
is_assistant = models.BooleanField(default=False)
class Profile(models.Model):
profile = models.OneToOneField(User, on_delete=models.CASCADE)
class Manager(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
user_profile = models.OneToOneField(Profile, on_delete=models.CASCADE)
我正在尝试更新一个 Manager 实例,但不太确定为什么 self.instance.user.profile_set.all()
在本节中不断抛出“'User' 对象没有属性 'profile_set'”AttributeError:
forms.py
elif self.instance.pk:
self.fields['user_profile'].queryset = self.instance.user.profile_set.all()
我希望我的问题很清楚,任何帮助将不胜感激!
干杯!
您可以通过以下方式访问 User
的相关 Profile
:
<em>myuser</em>.<strong>profile</strong>
事实上,OneToOneField
本质上是具有 unique=True
约束的 ForeignKey
。这意味着对于 User
,最多 个相关 Profile
。默认情况下,related_name=…
parameter [Django-doc] 是 class(此处为 Profile
)的小写名称(因此 profile
)。因此,您可以使用 .profile
访问相关的 Profile
。如果不存在这样的 Profile
,它将引发 AttributeError
。
manager的建模有冗余数据:不需要同时指定User
和Profile
,可以先确定另一个。通过引入 重复数据 ,您可以在未来存在 Manager
s,其中 user
被更新,但 user_profile
没有并且反之亦然。如果您需要 profile
并存储 user
,您可以使用 <i>mymanager</i><b>.[=61= 访问它]</b>
,如果您存储 user_profile
,您可以使用 <i>mymanager</i><b> 访问它。 user_profile.user</b>
。因此,存储两者没有多大意义。
Note: It is normally better to make use of the settings.AUTH_USER_MODEL
[Django-doc] to refer to the user model, than to use the User
model [Django-doc] directly. For more information you can see the referencing the User
model section of the documentation.
我是 Django 的新手,一直在努力研究与 _set.all()
的 OneToOne 字段关系我的models.py
class User(AbstractUser):
is_admin = models.BooleanField(default=False)
is_employee = models.BooleanField(default=True)
is_manager = models.BooleanField(default=False)
is_assistant = models.BooleanField(default=False)
class Profile(models.Model):
profile = models.OneToOneField(User, on_delete=models.CASCADE)
class Manager(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
user_profile = models.OneToOneField(Profile, on_delete=models.CASCADE)
我正在尝试更新一个 Manager 实例,但不太确定为什么 self.instance.user.profile_set.all()
在本节中不断抛出“'User' 对象没有属性 'profile_set'”AttributeError:
forms.py
elif self.instance.pk:
self.fields['user_profile'].queryset = self.instance.user.profile_set.all()
我希望我的问题很清楚,任何帮助将不胜感激! 干杯!
您可以通过以下方式访问 User
的相关 Profile
:
<em>myuser</em>.<strong>profile</strong>
事实上,OneToOneField
本质上是具有 unique=True
约束的 ForeignKey
。这意味着对于 User
,最多 个相关 Profile
。默认情况下,related_name=…
parameter [Django-doc] 是 class(此处为 Profile
)的小写名称(因此 profile
)。因此,您可以使用 .profile
访问相关的 Profile
。如果不存在这样的 Profile
,它将引发 AttributeError
。
manager的建模有冗余数据:不需要同时指定User
和Profile
,可以先确定另一个。通过引入 重复数据 ,您可以在未来存在 Manager
s,其中 user
被更新,但 user_profile
没有并且反之亦然。如果您需要 profile
并存储 user
,您可以使用 <i>mymanager</i><b>.[=61= 访问它]</b>
,如果您存储 user_profile
,您可以使用 <i>mymanager</i><b> 访问它。 user_profile.user</b>
。因此,存储两者没有多大意义。
Note: It is normally better to make use of the
settings.AUTH_USER_MODEL
[Django-doc] to refer to the user model, than to use theUser
model [Django-doc] directly. For more information you can see the referencing theUser
model section of the documentation.