Django Model Instance'a setattr ile Key, Value Nasıl Gönderilir?
Senaryomuz: request.GET ile gelen first_name bilgisini alıp eğer Model'in içinde bu tanım varsa eklemek istiyoruz. Fakat gelen tanımı user.first_name olarak kullanmak yerine GET ile birlikte gelen KEY, VALUE şeklinde kullanmak istersek ne yapmamız lazım ? eğer key bilgisini alırsak key; user.'first_name' olarak geliyor, biz bu şekilde veri tabanına yazamayız. Bu yüzden setattr ile Instance'a veri eklemeyi göstereceğim.
# Gelen bilgi
dict_request = {'first_name': 'hakan'}
# Dict içindeki ilk bilgiyi almaya çalışıyoruz:
item, value = next(iter(dict_request.items()))
user = User.objects.get(email='hakanyalcinkaya@gmail.com')
# Hatalı Olan:
user.item = value
>>> user.'item': 'hakan'
# Bu kodda gördüğünüz gibi string veri istediğimiz gibi işlenmedi.
# setattr ile birlikte:
if item in user.__dict__ and value:
setattr(user, item, value)
user.save()
:::warning Bonus:
# instance içindeki attribute'u almak için:
item = 'first_name'
user = User.objects.get(email='hakanyalcinkaya@gmail.com')
getattrb(user, item)
>>> 'hakan'
:::