2013-06-04 27 views
5

Đối với mô hìnhLàm cách nào để lấy các cột/trường có truy vấn giống nhau?

class User(db.Model, BaseUser): 
    name = CharField() 
    phone = CharField() 
    age = IntegerField() 
    points = IntegerField() 

và một danh sách các lĩnh vực, lst = ['phone', 'name', 'points']

Có cách nào để có được truy vấn của bạn để trả lại trường trong lst?

Tôi không thể tìm thấy ví dụ trong số docs, nhưng có vẻ như ORM của Django có thứ gì đó như ...get().values(lst).

tôi đã cố gắng đi qua danh sách như một cuộc tranh cãi để User.select(), nhưng có được

TypeError: issubclass() arg 1 must be a class 

Tôi đoán tôi có thể làm một cái gì đó giống như [getattr(obj, field) for field in lst] với một đối tượng kết quả, nhưng dường như có phải là một cách tốt hơn?

Cập nhật: Liên kết đến values trong tài liệu của Django là here.

Trả lời

1

Không chắc chắn vấn đề của bạn là gì, nhưng bạn đã thử sử dụng object_list, với việc sử dụng bình-peewee?

def user_query(): 

    lst_result = User.select().where(User.name == lst.name) 

    return object_list('yourtemplate.html', lst_result, 'list_user') 

Tôi xin lỗi nếu không có nhiều trợ giúp.

Trân trọng.

+0

Cảm ơn, nhưng có vẻ như đây là dành cho mẫu Flask không? (mà tôi không sử dụng) – beardc

8

Bạn có thể sử dụng:

User.select(User.phone, User.name, User.points) 

http://peewee.readthedocs.org/en/latest/peewee/api.html#SelectQuery

+1

Cảm ơn, tôi đã sử dụng theo cách đó (trên thực tế, một cái gì đó như 'User.select (* [getattr (Người dùng, f) cho f trong lst])') nhưng đã tự hỏi nếu có một cách để trực tiếp truyền danh sách các chuỗi tên trường như phương thức 'values' của Django. Tôi sẽ cập nhật câu hỏi bằng liên kết tới tài liệu mà tôi đang đề cập đến. – beardc

+0

Btw, tôi thích ORM :) – beardc

3

Bạn có thể sử dụng:

lst = [User.phone, User.name, User.points] 

User.select(*lst) 

tôi sử dụng phương pháp này để chọn các lĩnh vực tự động SELECT từ một danh sách được xác định trước.

0

Đây là hình ảnh cũ nhưng tôi đã tìm thấy câu trả lời gần đây.

Cho một cá thể u từ bảng Người dùng, sau đó u._data trả về từ điển có tên trường là khóa.

Ví dụ:

db.connect() # db was established with connection parameters for your database 
u = User.get() # get one record 
print u._data # get dictionary with field names as keys 
db.close() # free up your connection 
0

Các giải pháp này là sử dụng tuples hoặc dicts.

Ví dụ cho các bộ từ các tài liệu:

stats = Stat.select(Stat.url, fn.Count(Stat.url)).group_by(Stat.url).tuples() 

# iterate over a list of 2-tuples containing the url and count 
for stat_url, stat_count in stats: 
    print stat_url, stat_count 

Ví dụ cho dicts từ các tài liệu:

stats = Stat.select(Stat.url, fn.Count(Stat.url).alias('ct')).group_by(Stat.url).dicts() 

# iterate over a list of 2-tuples containing the url and count 
for stat in stats: 
    print stat['url'], stat['ct'] 

Hãy nhớ rằng kết quả là vòng lặp, vì vậy nếu bạn muốn toàn bộ tuple hoặc dict trong bộ nhớ bạn phải khởi tạo nó bằng các phương thức mặc định: tuple(stats) hoặc dict(stats).

More info here

Các vấn đề liên quan