Доступ к пользовательским моделям Django через Manager возвращает пустой набор - PullRequest
0 голосов
/ 24 марта 2011

Из всего, что я прочитал, похоже, что это должно работать, но это не так.

У меня есть пользовательская модель:

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

И я также использую модель User, включенную в 'django.contrib.auth.models'.

Когда я создаю канал, например,

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

(или аналогичный с указанным пользователем), по-видимому, сохраняет его в базе данных (я получаю его PK, который постоянно увеличивается), но Feed.objects.all () возвращает пустой список. Попытка фильтрации по существующему ПК также возвращает пустой список, а попытка получить () существующего ПК дает мне следующую ошибку

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

Глядя на то, как я должен извлекать объекты из пользовательских моделей , кажется, что я сделал все, что должен, но это явно не так ...

Ответы [ 2 ]

2 голосов
/ 24 марта 2011

Вау.

Почему вы переопределяете __init__ вашей модели?Есть очень мало веских причин для этого, и если вы это сделаете, вы должны абсолютно сохранить интерфейс одинаковым - потому что __init__ вызывается каждый раз, когда django извлекает одну из ваших моделей из БД (именно поэтому вы получаете ошибкукогда вы звоните .get())

Чего вы надеетесь достичь с помощью __init__?

Вы, вероятно, просто удалите __init__, и тогда вы сможете создавать объекты Feed как обычно,django way:

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

Эта строка создаст нужный объект подачи.

0 голосов
/ 24 марта 2011

Вы пробовали именованные аргументы, например

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

Как вы использовали get ()? Его также следует использовать с именованными аргументами, например ::10000

Feed.objects.get(pk=6)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...