Как добавить метод в модель, которая принимает строку JSON и создает новые записи - PullRequest
0 голосов
/ 12 ноября 2018

Мне нужно создать две модели Django: «Пациент» и «Эмбрион».

Свойства «пациента»: Имя (строка) Фамилия (строка) Номер телефона (строка) Email (строка) Создано в (дата / время)

Свойства «Эмбриона»: Имя (строка) Результаты анализа (текст) Создано в (дата / время) ФИО пациента Пациент (внешний ключ)

Теперь мне нужно добавить метод к модели «Пациент», который принимает строку JSON и создает новые записи «Эмбрион». Вот строка JSON:

[
{
"name": "embryo_1",
"analysis_results": "46,XX"
},
{
"name": "embryo_2",
"analysis_results": "47,XY,+21"
},
{
"name": "embryo_3",
"analysis_results": "46,XY"
},
]

Ниже представлены мои модели, которые я создал Я не уверен, как добавить метод к модели «Пациент», который принимает строку JSON и создает новые записи «Эмбрион».

class Patient(models.Model):
    first_name = models.CharField(max_length=25)
    last_name = models.CharField(max_length=35)
    phone = models.CharField(max_length=18)
    email = models.EmailField(unique=True)
    created_at =  models.DateTimeField(auto_now_add=True)



class Embryo(models.Model):
     name = models.CharField(max_length=45)
     analysis_result = models.Charfield(max_length=10)
     created_at = models.DateTimeField(auto_now_add=True)
     patient = models.ForeignKey(Patient, on_delete=models.CASCADE)

    @property
    def patient_full_name(self):
       return "%s %s" % (self.patient.first_name, self.patient.last_name)

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Вы можете добавить метод экземпляра к классу модели, как и любой другой класс Python .

  • Загрузка dict из строки json (желательно с использованием json.loads ).
  • Создание списка Embryo объектов.
  • Передайте список методу bulk_create , чтобы создать несколько объектов в одном запросе.

Пример :

import json

class Patient(models.Model):
    # fields

    def add_embryos(self, embryos_json_str='{}'):
        embryos = json.loads(embryos_json_str)

        embryo_objs = []
        for embryo in embryos:
            embryo_objs.append(Embryo(
                name=embryo['name'],
                analysis_result=embryo['analysis_results'],
                patient=self
            ))

        Embryo.objects.bulk_create(embryo_objs)

NOTE :

  • Вы можете обернуть json.loads в блок try-except, чтобы не вызывать ненужных исключений.
  • Если в json слишком много объектов эмбрионов,используйте batch_size аргумент bulk_create для вставки в пакетах.
0 голосов
/ 12 ноября 2018

Метод, специально предназначенный для этого, может не потребоваться:

Вы можете использовать Python json.loads() для загрузки в список словарей, а затем выполнить цикл для создания моделей.

import json

В начале вашего файла, затем по вашему мнению:

#get the string from your request or form or wherever you get it
dict_list = json.loads('[{...}, {...}, {...}]'

for entry in dict_list:
    Embryo.objects.create(**entry)

синтаксис (**entry) распаковывает ваш dict в kwargs

Надеюсь, это решит вашу проблему! :)

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