L’utilizzo datetime confrontare con le date in Django

Ho una domanda in Django su come confrontare le date per risolvere alcune soluzioni. Io per esempio ho un datefield nel mio models.py Come di seguito.

class Invoice(models.Model):
    payment_date = models.DateTimeField()

Quello che voglio essere in grado di fare è chiedere se è un modo per confrontare un valore di tipo datetime.ora, con un DateTimeField. Per esempio se ho un elenco di date di pagamento e ho voluto confrontare con data e ora ora. Thhe payment_date che sono in ritardo con i pagamenti sono riportati in seguito. In caso contrario, il valore è zero.

Qui è il mio punto di vista per mostrare cosa sta succedendo. Ho cercato ma mi da un valore 0 per payment_date che sono oltre la data di pagamento.

Modifica questa è la mia ultima vista. La cosa buffa è che mi sembra di essere sempre la causa = invoice_gross per tutti i risultati – a differenza di prima quando mi è stato sempre tutti 0s. Così non funziona ancora correttamente.

@login_required
def homepage(request):
    invoices_list = Invoice.objects.all()
    invoice_name = invoices_list[0].client_contract_number.client_number.name
    invoice_gross = invoices_list[0].invoice_gross
    payment_date = invoices_list[0].payment_date
    if payment_date <= datetime.now():
        owing = invoice_gross
        if payment_date > datetime.now():
            owing = 0
    return render_to_response(('index.html', locals()), {'invoices_list': invoices_list ,'invoice_name':invoice_name, 'invoice_gross':invoice_gross,'payment_date':payment_date,'owing':owing}, context_instance=RequestContext(request))

Oh, e il mio tavolo è fondamentalmente facendo qualcosa di simile a questo.

ID  Owing
1   100   (All the same value)
2   100
3   100
.   .
.   .
.   .
InformationsquelleAutor Shehzad009 | 2011-01-05



2 Replies
  1. 7

    Penso che il problema sia nella linea

    if datetime.now() == payment_date:

    Che letteralmente vedere se il payment_date è adesso. Penso che si desidera vedere, se è maggiore o uguale al payment_date, nel qual caso si dovrebbe utilizzare

    if datetime.now() >= payment_date:

    È anche possibile filtrare le fatture quando si esegue una query di database:

    invoices_list = Invoice.objects.filter(payment_date__lte=datetime.now())

    Aggiornamento

    Il tuo codice è sbagliato, perché si sono reciprocamente esclusivi condizionali. Look:

    if payment_date <= datetime.now():
        owing = invoice_gross
        if payment_date > datetime.now():
            owing = 0

    Che prima controlla se payment_date è prima di ora. Quindi, imposta owing per invoice_gross. Poi, nella stessa condizionale, controlla per vedere se payment_date dopo ora. Ma non può essere! Si sono solo in questo blocco di codice se payment_date è prima ora!

    Penso che tu abbia un rientro di errore, e desidera che questo, invece:

    if payment_date <= datetime.now():
        owing = invoice_gross
    if payment_date > datetime.now():
        owing = 0

    Che, naturalmente, è la stessa:

    if payment_date <= datetime.now():
        owing = invoice_gross
    else:
        owing = 0
    • se io cambio “se datetime.ora >= payment_date:” ricevo questo errore non si può paragonare datetime.data di builtin_function_or_method
    • datetime.now è una funzione, chiamata da datetime.now()
    • Di nuovo sul mio computer. Ancora non funziona correttamente. Guardare il codice più recente.
    • Ho aggiornato la mia risposta per affrontare il problema.
    • Il divertente trattino errore ha smesso di apparire. Unico problema è che ho ancora lo stesso problema. Ho una tabella dove in una colonna viene visualizzato il numero di fattura. L’altra mostra, a causa dei pagamenti. Ogni numero della fattura corrisponde a quello dovuto. Quando c’è almeno un grazie = invoice_gross, TUTTE le righe della colonna viene visualizzato lo stesso a causa del valore. Io non sono sicuro perché lo fa.
    • Bene, si sta solo controllando la data di pagamento del prima fattura, e l’impostazione owing a tale valore. È questo che vuoi?
    • Una fattura, un payment_date. Ho bisogno di controllare per tutti payment_date. Se uno payment_date che è in ritardo, il loro valore è uguale fattura lordo. Se uno payment_date non è scaduto il valore è zero. Speranza che aiuta

  2. 9

    Utilizzare datetime.now() (si noti che le parentesi). Inoltre, ricordatevi che il campo sempre essere un datetime oggetto. Inoltre, (credo che) si dovrebbe verificare solo la data del datetime per abbinare la data corrente (o altrimenti saranno solo match che secondo specifiche). Per questo è necessario verificare se payment_date.date() == date.today() (dove date è datetime.date)

    Questo significa anche che è possibile filtrare come questo: Invoice.objects.filter(payment_date__lte=datetime.now()).

    __lte, __gte, __lt, __gt sono utilizzati per <=, >=, < e >

Lascia un commento