Как вручную заполнить данные модели Django для вставки - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь сохранить список таймингов для теста скорости.

Все тайминги сериализуются на стороне клиента и отправляются на сервер через ajax.

Модель:

class SpeedTest(models.Model):
    t1 = models.DecimalField(max_digits=9, decimal_places=6, default=None, blank=True, null=True)
    t2 = models.DecimalField(max_digits=9, decimal_places=6, default=None, blank=True, null=True)
    t3 = models.DecimalField(max_digits=9, decimal_places=6, default=None, blank=True, null=True)
    ...
    ...
    ...
    t100+ = ...

Просмотр:

def save(request):
    results = json.loads(request.POST.get('results'))

    speed_test = SpeedTest.objects.create()

    for result in results:
        key = "t"+str(result['key'])
        speed_test.key = value

    speed_test.save()

Где results имеет вид:

results[0]['key'] = 1
results[0]['value'] = 0.539
results[1]['key'] = 2
results[1]['value'] = 0.654
results[2]['key'] = 3
results[2]['value'] = 0.426
...
...
...
results[100+]...

Я пытаюсь перебратьвсе значения t1 - t100+ и добавить их в мой объект модели.Т.е. цикл для выполнения:

speed_test.t1 = 0.539
speed_test.t2 = 0.654
speed_test.t3 = 0.426
...
etc

Эти строки не выполняют работу.

key = "t"+str(result['key'])
speed_test.key = value

Как правильно это сделать?

1 Ответ

0 голосов
/ 24 декабря 2018

это вопрос, на который дан ответ в другом контексте здесь Как установить поле модели django по имени? .

Чтобы объяснить это немного подробнее и с вашим кодом в качестве примера:

Создайте имя поля с помощью key = "t"+str(result['key']),

Установите желаемое значение с помощью setattr(speed_test, key, result['value'])

И после цикла не забудьте вызвать speed_test.save().

Одно личное рекомендация:

Если вы хотите больше работы, связанной с AJAX / JSON, вы можете рассмотреть Django-REST-Framework для его Serializer, который обрабатывает такие вещи довольнохорошо для простых / плоских случаев (ваша текущая проблема будет в такой категории).

ПРИМЕЧАНИЕ. В приведенном вами примере данных

results[0]['key'] = 1
results[0]['value'] = 0.539
results[1]['key'] = 2
results[1]['value'] = 0.654
results[2]['key'] = 2
results[2]['value'] = 0.426

действительно ли третий результат перезаписывает второй?

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...