如何解决在 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)
我想从站点模型访问 SiteSettings 表中的 header_text
字段。我尝试使用以下方法获取值:
value = Site.settings.header_text
print(value)
我收到错误:
AttributeError: 'ReverseOneToOneDescriptor' 对象没有属性 'header_text'
感谢任何帮助。
解决方法
Site
是对 Site
类的引用,而不是 Site
对象。您可以使用 get_current()
[Django-doc] 获取当前站点,然后反向使用该关系:
from django.contrib.sites.shortcuts import get_current_site
get_current().settings.header_text
如果没有多个站点,首先使用 ForeignKey
到 Site
没有多大意义,因为只有一个。在这种情况下,您可以制作一个模型:
# if there are no multiple Sites
from django.db import models
class SiteSettings(models.Model):
# no ForeignKey to Site
header_text = models.CharField(max_length=200,blank=True)
然后确保SiteSettings
有恰好一条记录,然后通过以下方式访问它:
# if there are no multiple Sites and only one SiteSettings record
SiteSettings.objects.get().header_text
您可以使用 .only(…)
[Django-doc] 略微提高性能:
# if there are no multiple Sites and only one SiteSettings record
SiteSettings.objects.only('header_text').get().header_text
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。