À l'aide de datetime pour comparer avec les dates dans Django
J'ai une question dans Django sur comment vous pouvez comparer les dates de résoudre un certain nombre de solutions. Par exemple, j'ai un datefield dans mon models.py Comme ci-dessous.
class Invoice(models.Model):
payment_date = models.DateTimeField()
Ce que je veux être en mesure de faire est de demander si la est un moyen de comparer un datetime.maintenant, avec un DateTimeField. Par exemple, si j'avais une liste de dates de paiement et j'ai voulu comparer avec datetime maintenant. Le payment_date qui sont en retard dans leurs paiements sont indiqués en cause. Sinon, la valeur est zéro.
Voici mon point de vue pour montrer ce qui se passe. J'ai essayé jusqu'à présent mais j'obtiens une valeur de 0 pour payment_date qui sont plus tard à la date de paiement.
Modifier voici mes derniers points de vue. La chose drôle est que j'ai l'impression de recevoir la grâce = invoice_gross pour tous les résultats, contrairement à avant, quand je recevais tous les 0s. Si cela ne fonctionne toujours pas correctement.
@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, et ma table est essentiellement de faire quelque chose comme cela.
ID Owing
1 100 (All the same value)
2 100
3 100
. .
. .
. .
OriginalL'auteur Shehzad009 | 2011-01-05
Vous devez vous connecter pour publier un commentaire.
Je pense que le problème est dans la ligne de
Qui va littéralement voir si le
payment_date
est maintenant. Je pense que vous voulez voir si maintenant est supérieure ou égale à lapayment_date
, dans ce cas, vous devez utiliserVous pouvez aussi filtrer les factures lorsque vous interrogez la base de données:
Mise à jour
Votre code n'est pas correct parce que vous avez mutuellement exclusifs conditions. Look:
Qui vérifie d'abord si
payment_date
est avant aujourd'hui. Elle définit ensuiteowing
àinvoice_gross
. Puis, dans le même conditionnelle, il vérifie pour voir sipayment_date
est après maintenant. Mais cela ne peut pas être! Vous êtes seul dans ce bloc de code sipayment_date
est avant maintenant!Je pense que vous avez une échancrure erreur, et que vous voulez ceci à la place:
Qui, bien sûr, est le même que:
datetime.now
est une fonction, l'appeler pardatetime.now()
De retour sur mon ordinateur. Il ne fonctionne toujours pas correctement. Regardez la dernière version du code.
J'ai mis à jour ma réponse pour résoudre le problème.
Le plus drôle, tiret erreur a cessé de paraître. Seul problème, j'ai toujours le même problème. J'ai une table où dans une colonne affiche le numéro de la facture. L'autre affiche du fait des paiements. Chaque numéro de la facture correspondant à cette cause. Quand il y a moins d'une raison = invoice_gross, TOUTES les lignes de cette colonne affiche le même en raison de la valeur. Je ne suis pas sûr de savoir pourquoi il agit de cette façon.
OriginalL'auteur mipadi
Utilisation
datetime.now()
(avis de parens). Autres que que, rappelez-vous que le champ toujours être undatetime
objet. Aussi, (je pense que) vous devriez vérifier que les date de la datetime pour correspondre à la date actuelle (ou autre chose, elle ne corresponde spécifiques seconde). Pour que vous devez vérifier sipayment_date.date() == date.today()
(oùdate
estdatetime.date
)Cela signifie également que vous pouvez filtre comme ceci:
Invoice.objects.filter(payment_date__lte=datetime.now())
.__lte
,__gte
,__lt
,__gt
sont utilisés pour<=
,>=
,<
et>
OriginalL'auteur Gabi Purcaru