Как создать модель django для JSONField, которая принимает значения из других полей из той же таблицы? - PullRequest
1 голос
/ 08 марта 2020

Я пишу модель в django, которая выглядит следующим образом:

name = models.CharField(max_length=50)
address = models.CharField(max_length=100)
info = JSONField()

Вопрос: Для запроса POST я предоставлю имя и адрес как json. Теперь, как мне сохранить имя и адрес в соответствующих полях и сохранить данные json, то есть "name: {...}, address: {...}", и сохранить их в информационном поле?

Ответы [ 2 ]

0 голосов
/ 08 марта 2020

Вы можете переопределить метод save, который добавит эти поля в вашу информацию JSONField перед сохранением экземпляра.

См .: Django - Переопределение метода Model.create ()?

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

0 голосов
/ 08 марта 2020

Это более или менее то, как я создаю свои почтовые запросы:

class MyPostView(View):
    def post(self, request):
        # Get request data
        data = json.loads(request.body)

        # Extract the values I  need
        name = data.get('name')
        address = data.get('address')

        # If the info already comes from the request do this
        info = data.get('info')

        # If you want to create the info field here do this
        info = {'name':name, 'address': address}

        # Create new model object
        new_profile = Profile()

        # Assign values
        new_profile.name = name
        new_profile.address = address
        new_profile.info = info

        # Save my object to database
        new_profile.save()

        # Return response (change this to whatever you want to return)
        return HttpResponse("Success")

Здесь я использую представления на основе классов, но вы можете использовать представления на основе функций таким же образом. Я просто не уверен, почему вы хотите сохранить информацию для имени и адреса дважды.

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

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