【问题标题】:Accessing Django custom models through Manager returns empty set通过 Manager 访问 Django 自定义模型返回空集
【发布时间】:2011-03-24 14:20:55
【问题描述】:

从我读到的所有内容来看,这似乎应该只是工作,但事实并非如此。

我有一个自定义模型:

from django.db import models
from django.contrib.auth.models import *

class Feed(models.Model):
    user = models.ForeignKey(User, blank=True, null=True)
    link = models.CharField(max_length=200)
    startDate = models.CharField(max_length=8)
    endDate = models.CharField(max_length=8)

    def __unicode__(self):
        return str(self.id)

    def __init__(self, link, sDate, eDate, user=None):
        super(Feed, self).__init__()
        self.link = link
        self.startDate = sDate
        self.endDate = eDate
        self.user = user

而且我还在使用“django.contrib.auth.models”中包含的用户模型。

当我创建提要时,例如

feed = Feed(link, sDate, eDate)
feed.save()

(或具有指定用户的类似)它似乎将其存储在数据库中(我得到它的 PK 不断增加),但 'Feed.objects.all()' 返回一个空列表。尝试按现有 pk 过滤也会返回一个空列表,并尝试 get() 现有 pk 给我以下错误

TypeError: __init__() takes at most 5 arguments (6 given)

看看我应该如何retrieving objects from custom models,看来我已经做了我应该做的一切,但显然不是这样......

【问题讨论】:

    标签: python django django-models sqlite


    【解决方案1】:

    哇哦。

    为什么要覆盖模型的__init__?这样做的充分理由很少,如果这样做,则必须绝对保持界面相同-因为每次 django 从数据库中拉出您的模型之一时都会调用 __init__ (这就是您收到错误的原因当你打电话给.get())

    您希望通过__init__ 实现什么目标?

    您可能应该删除您的__init__,然后您可以以正常的 django 方式创建 Feed 对象:

    feed = Feed(link=link, startDate=sDate, endDate=eDate)
    

    该行将创建您想要的正确提要对象。

    【讨论】:

    • 谢谢,成功了。如果我没记错的话,我们遇到了一个错误,我们通过覆盖 init 修复了该错误,但这不是其他问题,就是现在不是问题,您的解决方案似乎已经解决了它:) 再次感谢。
    【解决方案2】:

    您是否尝试过命名参数,例如

    feed = Feed(link=link, startDate=sDate, endDate=eDate)
    

    你是如何使用 get() 的?它也应该与命名参数一起使用,例如:

    Feed.objects.get(pk=6)
    

    【讨论】:

    • 我刚刚尝试了命名参数,仍然得到相同的结果。是的,这就是我尝试使用 get 的方式,但我得到了提到的错误。
    猜你喜欢
    • 2014-11-15
    • 2019-08-27
    • 2015-07-09
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    相关资源
    最近更新 更多