Я пишу бухгалтерское приложение в django, и есть Order
s, у которых есть дата создания счета и необязательная дата создания кредит-ноты.
class Order(models.Model):
date_invoice_created = models.DateTimeField(null=True, blank=True)
date_credit_note_created = models.DateTimeField(null=True, blank=True)
В настоящее время я разрабатываю представление для нашего бухгалтера, и она хотела бы, чтобы и счет-фактура, и кредит-нота находились в отдельных строках на панели администратора, отсортированные по соответствующим датам создания.
Итак, в основном я хотел бы показать одну и ту же модель дважды, в разных строках, отсортированных по разным полям. В SQL это будет примерно так:
SELECT id, create_date FROM (
SELECT id, date_invoice_created AS create_date, 'invoice' AS type FROM order
UNION
SELECT id, date_credit_note_created AS create_date, 'creditnote' AS type FROM order
) ORDER BY create_date
Не обращайте внимания на то, что мой SQL-фу не актуален, но я думаю, вы понимаете, что я имею в виду.
Итак, я попытался заставить django сделать это за меня, переопределив дату во втором наборе запросов, потому что django не поддерживает объединение двух наборов запросов extra
:
invoices = Order.objects.filter(date_invoice_created__isnull=False)
credit_notes = Order.filter_valid_orders(qs
).filter(
date_credit_note_created__isnull=False
).extra(
select={'date_invoice_created': 'date_credit_note_created'}
)
return (invoices | credit_notes).order_by('date_invoice_created')
к сожалению, операция побитового ИЛИ для объединения всегда гарантирует, что идентификаторы различны, но я действительно хочу, чтобы они не были такими. Как я могу добиться объединения с повторяющимися строками?
contrib.admin
, который использует наборы запросов, чтобы творить чудеса. - person devsnd   schedule 17.09.2014itertools.chain
не совместим с интерфейсом набора запросов и поэтому не работает в моем случае. Мне нужен набор запросов, так как я хочу переопределить методqueryset
дляdjango.contrib.admin.ModelAdmin
... - person devsnd   schedule 18.09.2014