Псевдоним параметр функции в запросе модели Python / Django - PullRequest
0 голосов
/ 14 марта 2012

Мне было интересно, можно ли запросить модель Django, используя псевдонимы ее полей?

для примера:

class Book(models.Model):
    pub_date = models.DateTimeField(_('Publication Date'),
    ...

class Magazine(models.Model):
    creation_date = models.DateTimeField(_('Publication Date'),
    ...

Я могу назвать псевдоним класса, что здорово:

my_class = Book

затем запросите его как:

my_class.objects.all()

Отлично!

Я бы хотел иметь псевдоним Book.pub_date & Magazine.creation_date как my_pub_date, чтобы я мог сделать:

Book.objects.filter(my_pub_date__gt=some_date) (or my_class.objects.filter(my_pub_date__gt=some_date))

вместо:

Book.objects.filter(pub_date__gt=some_date)

Спасибо

1 Ответ

3 голосов
/ 14 марта 2012

Не без особых усилий.И даже если бы это было возможно, не делайте этого, если хотите сохранить здравый смысл.

В этом случае я бы использовал (a) абстрактный базовый класс, который содержит общую информацию для обеих моделей.

class Publication(models.Model):
    pub_date = models.DateField(_('publication date'))
    # other fields

    class Meta:
        abstract = True

class Book(Publication):
    # ...

class Magazine(Publication):
    # ...

Или (b) отдельная модель с полем publication_type, с возможностью выбора «книга» и «журнал».

Или (с) добавление пользовательских менеджеров и наборов запросов в обамодели с методом published_after, который знает, какой атрибут использовать для фильтра.

Я предлагаю выбрать (b), если нет большой разницы между книгами и журналами, и (a), если есть.

...