Django Итерация по полям конкретного экземпляра модели
Я новичок в django. Моя цель - создать словарь с ключами, взятыми из таблицы, и значениями, взятыми из конкретного экземпляра модели, который среди прочих содержит поля, которые мы можем встретить в таблице. Есть ли способ итерации по полям экземпляра модели для этого?
Моя идея, как вы видите ниже, не работает, потому что конкретный экземпляр, представленный как i, не распознает переменную j как свое поле.
Есть идеи?
my_fields=['car','model','age']
my_dict={} #I would like it to look like my_dict={'car':'Toyota','model':'Corolla','age':2}
class Cars(models.Model):
car=models.CharField(max_length=40)
model=models.CharField(max_length=40)
age=models.IntegerField()
country=models.CharField(max_length=40)
amounts_of_doors=models.IntegerField()
#particular instance
Object { model: "cars.Car", pk: 1, fields: {'car':'Toyota','model':'Corolla','age':2}}
#code I have tried
for i in Cars.objects.all():
if i.car=='Toyota:
for j in my_fields:
my_dict[j]=i.j <==it doesn't work
Полагаю, вы можете преобразовать экземпляр модели, используя model_to_dict. Затем вы можете получить доступ к его ключам и значениям, как
for i in Cars.objects.all():
if i.car=='Toyota':
for j in my_fields:
my_car_dict = model_to_dict(i)
my_dict[j] = my_car_dict[j]
Или вы можете использовать gettattr непосредственно на экземпляре вашей модели
for i in Cars.objects.all():
if i.car=='Toyota':
for j in my_fields:
my_dict[j] = getattr(i, j)
Вам не нужно делать ничего из этого, если у вас есть values, которые получают поля модели в качестве ключа и значения в качестве значений экземпляров.
toyota = Cars.objects.filter(id=1).values()
# do something with toyota
Все же, если вы хотите получить поля модели, просто сделайте это с помощью этого Car._meta.get_fields()