2016-02-22 1 views
1

Je suis begginer chez django et en essayant d'afficher l'âge pour chaque utilisateur dans ma base d'utilisateurs.Définir l'âge dans le modèle django en utilisant datatime réelle et anniversaire avec datafield

Voici mon code:

models.py:

class Cv(models.Model): 
    author = models.ForeignKey('auth.User') 
    name = models.CharField(max_length=25, null = True) 
    surname = models.CharField(max_length=25, null = True) 
    address = models.CharField(max_length=100, blank=True) 
    telephone = models.IntegerField() 
    birth_date = models.DateField(blank=True, null=True) 
    email = models.EmailField(max_length=50, null=True) 
    skills = models.TextField(null=True) 
    specialization = models.CharField(max_length=30, blank=True, null=True) 
    interests = models.TextField(blank=True, null=True) 
    summary = models.TextField(blank=True, null=True) 
    thumbnail = models.FileField(upload_to=get_upload_file_name, blank=True) 




    def zapisz(self): 
     self.save() 

    def __str__(self): 
     return self.surname 

template.html:

{% block base %} 
<div class="vvv"> 
    <h2>Base of users</h2><hr> 
    <table id="example" class="display" cellspacing="0" width="100%"> 
     <thead> 
      <tr> 
      <th>Nr.</th> 
      <th>Full Name</th> 
      <th>Specialization</th>  
      <th>Age</th> 
      <th>E-mail</th> 
      </tr> 
     </thead> 
     <tbody> 
      {% for cv in cvs %} 
       <tr> 
       <td>{{forloop.counter}}.</td> 
       <td><a href="{% url "proj.views.cv_detail" pk=cv.pk %}">{{cv.name}} {{cv.surname}}</a></td> 
       <td>{{cv.specialization}}</td>  
       <td>{{ cv.age }} </td> 
       <td>{{cv.email}}</td> 
       </tr> 
      {% endfor %} 
      </tbody> 
    </table><br> 


</div> 
{% endblock %} 

views.py:

@login_required 
def base_cv(request): 

    cvs = Cv.objects.filter() 

    for cv in cvs: 

     def calculate_age(self): 
      import datetime 
      return int((datetime.datetime.now() - cv.birth_date).days/365.25 ) 

     age = property(calculate_age) 

    con = { 

    'cvs': cvs, 
    'age': age, 
    } 

    return render(request, 'base_cv.html', con) 

et ne savent pas pourquoi les champs après le rendu et dépl aying, sont vides.

Merci pour toute aide!

+0

Pourquoi est-ce que vous ajoutez dynamiquement cette propriété plutôt que de simplement la définir sur la classe Cv elle-même? –

+0

Aussi, pourquoi avez-vous 'cvs = Cv.objects.filter()'? –

+0

Je dois avoir tous les cvs sur la page – Damian

Répondre

1

calculate_age doit être une fonction sur le modèle. Vous pouvez utiliser le décorateur @property décrit here comme:

from datetime import datetime 

class Cv(models.Model): 

    ... 

    @property 
    def age(self): 
     return int((datetime.now().date() - self.birth_date).days/365.25) 

Ensuite, votre point de vue peut être simplement:

@login_required 
def base_cv(request): 
    con = {'cvs': Cv.objects.all()} 
    return render(request, 'base_cv.html', con) 

all est préféré sur filter lorsque vous voulez que tous les modèles.

+0

Ok, j'ai aimé comme vous l'avez dit. Et quoi maintenant? Comment l'afficher à la place cv.age ou cv.birth_date? – Damian

+0

est ' {{cv.age}}' dans votre modèle n'affiche pas l'âge correct? – ben432rew

+0

Et que voulez-vous dire par "Comment l'afficher au lieu de ..." Afficher exactement quoi? – ben432rew