在 Django 中访问一对一 table 字段值
Accessing one-to-one table field value in Django
我有一个 Django 模型,它与 Django 站点建立了一对一的字段关系
from django.contrib.sites.models import Site
class SiteSettings(models.Model):
site = models.OneToOneField(Site, related_name="settings", on_delete=models.CASCADE)
header_text = models.CharField(max_length=200, blank=True)
我想从站点模型访问站点设置 table 中的 header_text
字段。我尝试使用以下方法获取值:
value = Site.settings.header_text
print(value)
我收到错误:
AttributeError: 'ReverseOneToOneDescriptor' object has no attribute
'header_text'
感谢任何帮助。
Site
是对 Site
class 的引用,而不是 Site
对象。您可以使用get_current()
[Django-doc]获取当前站点,然后使用反向关系:
from django.contrib.sites.shortcuts import get_current_site
<b>get_current()</b>.settings.header_text
如果没有多个站点,首先使用 ForeignKey
到 Site
没有多大意义,因为只有一个。那样的话,你可以做一个模型:
# if there are no multiple Sites
from django.db import models
class SiteSettings(models.Model):
# <i>no</i> ForeignKey to Site
header_text = models.CharField(max_length=200, blank=True)
然后你要确保恰好条SiteSettings
的记录,然后你访问它:
# if there are no multiple Sites and only <i>one</i> SiteSettings record
SiteSettings.objects<b>.get()</b>.header_text
您可以使用 .only(…)
[Django-doc]:
稍微提高性能
# if there are no multiple Sites and only <i>one</i> SiteSettings record
SiteSettings.objects<b>.only('header_text')</b>.get().header_text
我有一个 Django 模型,它与 Django 站点建立了一对一的字段关系
from django.contrib.sites.models import Site
class SiteSettings(models.Model):
site = models.OneToOneField(Site, related_name="settings", on_delete=models.CASCADE)
header_text = models.CharField(max_length=200, blank=True)
我想从站点模型访问站点设置 table 中的 header_text
字段。我尝试使用以下方法获取值:
value = Site.settings.header_text
print(value)
我收到错误:
AttributeError: 'ReverseOneToOneDescriptor' object has no attribute 'header_text'
感谢任何帮助。
Site
是对 Site
class 的引用,而不是 Site
对象。您可以使用get_current()
[Django-doc]获取当前站点,然后使用反向关系:
from django.contrib.sites.shortcuts import get_current_site
<b>get_current()</b>.settings.header_text
如果没有多个站点,首先使用 ForeignKey
到 Site
没有多大意义,因为只有一个。那样的话,你可以做一个模型:
# if there are no multiple Sites
from django.db import models
class SiteSettings(models.Model):
# <i>no</i> ForeignKey to Site
header_text = models.CharField(max_length=200, blank=True)
然后你要确保恰好条SiteSettings
的记录,然后你访问它:
# if there are no multiple Sites and only <i>one</i> SiteSettings record
SiteSettings.objects<b>.get()</b>.header_text
您可以使用 .only(…)
[Django-doc]:
# if there are no multiple Sites and only <i>one</i> SiteSettings record
SiteSettings.objects<b>.only('header_text')</b>.get().header_text