2011-08-08 18 views
6

Neye ihtiyacım var: DB'den nesne ayrıntıları almak istiyorum. Get() işlevini kullanıyorum. Ben sorun ben bir işlevde yapmak olduğunu, ve argümanlardan biri dize olarak alan adıdır: Artıkdjango - alan adının dinamik olduğu alan olsun

def delete_file_if_changed(id, change, form, model, field_name='image'): 
    if change: 
     if field_name in form.changed_data: 
      old_image = model.objects.get(pk__exact=id) 

- nasıl - ı ı old_image.field_name alabilirsiniz şeyi nasıl yap bunu?

cevap

17

Biliyorsunuz, bunun cevabın ilk başta olduğunu düşündüm - dinamik bir özellik aramanızı sağlar: ** operatörü işe yarar mı? Eğer zaten istediğiniz nesneyi varsa ve sen sadece bir dinamik adlı özelliğin değerini almak gerekirse

kw = {field_name:change} # you're not explicit as to which is the field_name 
         # value you would like to search for. 
old_image = model.objects.get(**kw) 

Ama, o zaman getattr(object, name[, default]) kullanabilirsiniz:

getattr(old_image, "id", "Spam") # gets old_image.id, if that does not exist, it 
           # defaults to the str "Spam" Of course, in this 
           # context, you probably want 
           # getattr(old_image, field_name) 
+0

i için searchung şey bu That . Teşekkürler. – robos85

0

Ne getattr(old_image, field_name) hakkında? Daha fazla bilgi documentation.

1

yalnızca alan değerini istiyorsanız, modeli örneği derlenmesini ve değerini almanın tüm süreci önlemek, sadece veritabanından doğrudan sorgu:

field_value = model.objects.values_list(field_name, flat=True).get(pk__exact=id) 
İlgili konular