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'

:::

Last Updated: 2/3/2019, 12:34:14 AM