2013-04-25 141 views
1

如果有一个模型,如:存储过程结果的Django模型

class Person(models.Model): 
    id = models.IntegerField() 
    first_name = models.CharField(max_length=50) 
    last_name = models.IntegerField() 
    birthday = models.DateField() 
    address = models.CharField(max_length=250)  
    phone = models.TimeField() 

要创建Person类的对象,我从一个存储过程中获取数据,如:

cursor = connection.cursor() 
cursor.callproc('sp_get_person_by_id', {id:1234}) 
results = cursor.fetchall() 

[Person(*row) for row in results] 

但“sp_get_person_by_id”返回更多字段比Person类属性。因此,“狗屎发生”,错误发生,因为有没有属性映射的字段。

可以只映射这些属性吗?我怎样才能做到这一点?

Thx提前。

干杯。

回答

1

如果你知道你会得到从存储过程后面的属性的顺序,你可以将它们传递到这样的模式:

cursor = connection.cursor() 
cursor.callproc('sp_get_person_by_id', {id:1234}) 
results = cursor.fetchall() 
result_list = [] 

from row in results: 
    p = self.model(id=row[0], fist_name=row[1], last_name=row[2], birthday=row[3]) 
    result_list.append(p) 
return result_list