'ReverseManyToOneDescriptor' 对象没有属性 'latest'
'ReverseManyToOneDescriptor' object has no attribute 'latest'
我在尝试 运行 函数时收到此错误。这是我的第一个 django/python 项目,所以我没有这方面的经验。我已经搜索过这个错误,但没有找到任何类似的东西。
def getpriority(chunks):
p = 0
for chunk in chunks:
a = chunk.result_set.all()
l = a.latest()
if pytz.utc.localize(datetime.now()) - l.timestamp > datetime.timedelta(days=3):
x = getresult(chunk)
print(x)
我正在尝试为我的 Chunk 模型分配优先级,这样我就可以 select 具有最高优先级的 Chunk 来使用该对象。
我认为我的错误是在 'a' 上调用 latest()
。
当我在 django 运行 Chunk.result_set.latest() shell 中出现以下错误:
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'ReverseManyToOneDescriptor' object has no attribute 'latest'
在我的结果模型中,我设置了 get_latest_by,我认为这是 运行 .latest():
所必需的
class Result(models.Model):
rel_chunk = models.ForeignKey(Chunk, on_delete=models.CASCADE)
score = models.IntegerField()
timestamp = models.DateTimeField(auto_now_add=True)
class Meta:
get_latest_by = 'timestamp'
我认为错误在于我在相关对象集上调用 latest 但如果不能在相关对象集上调用那么我如何才能找到最新的相关结果?
应该是chunk.result_set.latest()
不是Chunk.result_set.latest()
请注意 chunk
应该是实例而不是 class 模型。
该错误表明您正在访问模型 class 上的 result_set
属性。您需要在模型实例上访问它,在这种情况下它将 return 一个适当的管理器对象而不是 ReverseManyToOneDescriptor
:
chunk = Chunk.objects.get(...)
chunk.result_set.latest()
此处,chunk.result_set
是一个行为与 Result.objects
完全相同的管理器,除了它过滤查询集以仅包含与 chunk
实例相关的结果。管理器还有一些添加的方法来操纵chunk
和结果之间的关系,例如chunk.results_set.add()
和chunk.result_set.remove()
到add/remove结果从与这个[=相关的结果集15=] 实例。
由于这一切都适用于 Chunk
的特定 实例 ,因此在 class 级别访问相关管理器毫无意义。这就是为什么你需要一个 Chunk
实例来使用相关的管理器。
由于 chunk.result_set
是一个管理器实例,它代理所有查询集方法*。没有理由需要 chunk.result_set.all().latest()
而不是 chunk.result_set.latest()
.
*) delete()
在管理器上禁用,因此您不会意外删除所有对象。 as_manager()
已禁用,因为它对经理没有意义。
我在尝试 运行 函数时收到此错误。这是我的第一个 django/python 项目,所以我没有这方面的经验。我已经搜索过这个错误,但没有找到任何类似的东西。
def getpriority(chunks):
p = 0
for chunk in chunks:
a = chunk.result_set.all()
l = a.latest()
if pytz.utc.localize(datetime.now()) - l.timestamp > datetime.timedelta(days=3):
x = getresult(chunk)
print(x)
我正在尝试为我的 Chunk 模型分配优先级,这样我就可以 select 具有最高优先级的 Chunk 来使用该对象。
我认为我的错误是在 'a' 上调用 latest()
。
当我在 django 运行 Chunk.result_set.latest() shell 中出现以下错误:
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'ReverseManyToOneDescriptor' object has no attribute 'latest'
在我的结果模型中,我设置了 get_latest_by,我认为这是 运行 .latest():
所必需的class Result(models.Model):
rel_chunk = models.ForeignKey(Chunk, on_delete=models.CASCADE)
score = models.IntegerField()
timestamp = models.DateTimeField(auto_now_add=True)
class Meta:
get_latest_by = 'timestamp'
我认为错误在于我在相关对象集上调用 latest 但如果不能在相关对象集上调用那么我如何才能找到最新的相关结果?
应该是chunk.result_set.latest()
不是Chunk.result_set.latest()
请注意 chunk
应该是实例而不是 class 模型。
该错误表明您正在访问模型 class 上的 result_set
属性。您需要在模型实例上访问它,在这种情况下它将 return 一个适当的管理器对象而不是 ReverseManyToOneDescriptor
:
chunk = Chunk.objects.get(...)
chunk.result_set.latest()
此处,chunk.result_set
是一个行为与 Result.objects
完全相同的管理器,除了它过滤查询集以仅包含与 chunk
实例相关的结果。管理器还有一些添加的方法来操纵chunk
和结果之间的关系,例如chunk.results_set.add()
和chunk.result_set.remove()
到add/remove结果从与这个[=相关的结果集15=] 实例。
由于这一切都适用于 Chunk
的特定 实例 ,因此在 class 级别访问相关管理器毫无意义。这就是为什么你需要一个 Chunk
实例来使用相关的管理器。
由于 chunk.result_set
是一个管理器实例,它代理所有查询集方法*。没有理由需要 chunk.result_set.all().latest()
而不是 chunk.result_set.latest()
.
*) delete()
在管理器上禁用,因此您不会意外删除所有对象。 as_manager()
已禁用,因为它对经理没有意义。