2009-10-09 33 views
23

Điều này có vẻ như nó phải chết đơn giản, vì vậy tôi phải thiếu một cái gì đó. Tôi chỉ muốn đặt giá trị của một trường trong phiên bản mẫu của tôi theo tên. Giả sử tôi có:Cách đặt trường mô hình django theo tên?

class Foo(Model): 
    bar = CharField() 

f = Foo() 

Tôi muốn đặt giá trị của thanh theo tên chứ không phải bằng cách truy cập trường. Vì vậy, một cái gì đó như:

f.fields['bar'] = 'BAR" 

thay vì

f.bar = 'BAR' 

Tôi đã thử setattr nhưng nó không tồn tại giá trị trong cơ sở dữ liệu. Tôi cũng đã thử đi qua _meta.fields nhưng có nhiều lỗi trên đường đi.

Trả lời

48

Nếu bạn sửa đổi giá trị thông qua setattr, bạn cần nhớ lưu mô hình sau khi sửa đổi. Tôi đã bị cắn trong quá khứ, nơi tôi đã thay đổi các giá trị nhưng quên lưu mô hình và nhận được kết quả tương tự.

setattr(f, 'bar', 'BAR') 
f.save() 
+10

DOH! Yeah, tôi quên tiết kiệm. Tôi sẽ đi trốn trong sự xấu hổ bây giờ ... –

13

Chúng tôi có thể phải xem thêm mã.

setattr(f, 'bar', 'BAR') 

nên hoạt động vì đây là cách Django thực hiện nội bộ.

Đảm bảo bạn cũng đang gọi 'lưu'.

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