2014-12-04 3 views
0

У меня есть следующая модель и таблица;Добавить столбцы в queryset и таблицу django-table2

class Person(models.Model): 
    first_name = models.CharField(max_length=200) 
    last_name = models.CharField(max_length=200) 
    user = models.ForeignKey("auth.User") 
    dob = models.DateField() 

# tables.py 
class PersonTable(tables.Table): 
    class Meta: 
     model = Person 

Я хочу, чтобы сгенерировать SQL запрос для расчета обновленный возраст каждого лица на моей БД MySQL на лету, используя «» DOB каждый раз, когда я извлекать объекты, возможно с Джанго?

Кроме того, если я могу сгенерировать sql-запрос с дополнительным столбцом «возраст», как я могу добавить его в таблицу? Мне интересно, если я должен использовать django-table2 в этом случае.

EDIT: Я решил это сделать.

Я создал функцию на MYSQL для расчета возраста на основе даты типа arg. Тогда я использую эту функцию в сыром sql-запросе в моем представлении.

def get_persons(request): 
    list_people = Person.objects.raw("SELECT *, age(date_birth) AS edad FROM mytable) 

Для добавления этого нового столбца возрастного к моему столу, я создал новый класс Table и добавлены два столбца «возраст» и «деталь», как это:

class TablaBeneficiarios(tables.Table): 
    age= tables.Column(orderable=True,verbose_name= "Age") 
    detail= tables.TemplateColumn('<a href="/reports/beneficiario/{{record.id_beneficiario}}">Ver</a>',verbose_name="Acciones") #just a link column 

    class Meta: 
     model = FormularioA 
     attrs = {"class": "paleblue"} 
     fields = ("cod_pais", "num_familia", "num_miem_familia","fecha_ingreso_ret", "nombre", "prim_apellido", 
        "seg_apellido", "sexo", "etnia", "responsable", "age","detail") 

Спасибо заранее.

ответ

1
class Person(models.Model): 
    # ... 

    @property age(self): 
     result_age = 'some queryset that return one column and one row' or datetime.date.today() - self.dob 
     return result_age 


class PersonTable(tables.Table): 
    age = tables.Column('Custom name', order_by=('dob',)) # you cannot order by property, so put dob or orderable=False 

    class Meta: 
     model = Person 
+0

Спасибо за вашу помощь, я решил вчера, посмотрю редактирование. Еще раз спасибо –

Смежные вопросы