【问题标题】:Using _set.filter(id = 4) Django field fetch使用 _set.filter(id = 4) Django 字段获取
【发布时间】:2019-03-15 03:49:27
【问题描述】:

这是我的问题

我正在尝试从使用外键连接到主题模型的页面模型中获取数据。有什么方法可以快速获取数据吗?

这是我的意见.py

urls.py

我正在尝试获取字段标题表单 page_set.filter 对象。

这是我的models.py

from django.db import models
from ckeditor.fields import RichTextField
# Create your models here.


class Subject(models.Model):
 title = models.CharField(max_length = 200)
 slug = models.SlugField(blank = False)
 visible = models.BooleanField(default = True)
 position = models.IntegerField()
 date_published = models.DateTimeField(auto_now_add = True)
 date_updated = models.DateTimeField(auto_now_add=False)

 def __str__(self):
    return self.title


class Page(models.Model):
 subject = models.ForeignKey(Subject, on_delete= models.CASCADE)
 title = models.CharField(max_length = 200)
 slug = models.SlugField(blank = False)
 description = models.TextField()
 thumbs = models.ImageField(blank = True)
 visible = models.BooleanField(default = True)
 position = models.IntegerField()
 date_published = models.DateTimeField(auto_now_add = True,auto_now=False)
 date_updated = models.DateTimeField(auto_now_add=False, auto_now=True)


 def __str__(self):
    return self.title

类 NewsFeed(models.Model):

 title = models.CharField(max_length = 200)
 slug = models.SlugField(blank = False)
 description = models.TextField()
 thumbs = models.ImageField(blank = True)
 visible = models.BooleanField(default = True)
 position = models.IntegerField()
 date_published = models.DateTimeField(auto_now_add = True)
 date_updated = models.DateTimeField(auto_now_add=False)


 def __str__(self):
    return self.title

【问题讨论】:

  • 请不要将代码粘贴为图片。
  • 你需要在a.page_set上的查询集上调用.get()而不是.filter()
  • 展示你的模特,请不要拍照

标签: python django python-3.x django-queryset


【解决方案1】:

Page.objects<b>.filter(id=4)</b> 导致Pages 的QuerySet,而不是单个 Page。即使QuerySet 包含一个元素,它也不是Page(就像一个带有一个数字的列表,不是一个数字)。或者如filter(..) documentation中指定的:

返回一个新的QuerySet,其中包含与给定查找参数匹配的对象。

您可以使用Page.objects<b>.get(id=4)</b> 获取Page 对象(假设它存在,并且只有一个这样的对象存在,否则会引发错误)。或者如get(..) documentation中指定的:

返回与给定查找参数匹配的对象,它应该 采用字段查找中描述的格式。

get() 引发 MultipleObjectsReturned 如果不止一个对象 成立。 MultipleObjectsReturned 异常是 模型类。

如果找不到对象,get() 会引发 DoesNotExist 异常 给定的参数。此异常是模型的一个属性 类。

【讨论】:

  • 感谢您的反馈,我一直在寻找快速答案,我忽略了 .get 方法,而是使用了教程中的过滤器。我现在已经使用了 .get 方法,并且效果很好。问候
猜你喜欢
  • 1970-01-01
  • 2011-04-15
  • 2015-04-02
  • 1970-01-01
  • 1970-01-01
  • 2020-01-11
  • 2020-07-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多