Django две модели в одном виде с ajax? - PullRequest
0 голосов
/ 30 апреля 2020

Я создал вид, который дает мне возможность заполнить форму с помощью вызова Ajax. Этот код:

# models.py

class CrudUser(models.Model):
    name = models.CharField(max_length=30, blank=True)
    address = models.CharField(max_length=100, blank=True)
    age = models.IntegerField(blank=True, null=True)

# Views.py

from .models import CrudUser
from django.views.generic import View
from django.http import JsonResponse

class CreateCrudUser(View):
    def  get(self, request):
        name1 = request.GET.get('name', None)
        address1 = request.GET.get('address', None)
        age1 = request.GET.get('age', None)

        obj = CrudUser.objects.create(
            name = name1,
            address = address1,
            age = age1
        )

        user = {'id':obj.id,'name':obj.name,'address':obj.address,'age':obj.age}

        data = {
            'user': user
        }
        return JsonResponse(data)'

Но если я хочу добавить новые модели в мой CreateCrudUser, как я могу это сделать? Пример объявления следующий:

# models.py

    class Dog(models.Model):
        name = models.CharField(max_length=30, blank=True)
        eyes_color= models.CharField(max_length=100, blank=True)
        age= models.IntegerField(blank=True, null=True)

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Прежде всего, вы можете отправить непосредственно созданный объект, вам не нужно повторно передавать параметры. И чтобы получить новый объект, вы должны сделать то же самое, что и с пользователем:

class CreateCrudUser(View):
def  get(self, request):
    name1 = request.GET.get('name', None)
    address1 = request.GET.get('address', None)
    age1 = request.GET.get('age', None)


    dog_obj = Dog.objects.create(
        name = XXX,
        eyes_color = XXX,
        age = XXX
    )    

    obj = CrudUser.objects.create(
        name = name1,
        address = address1,
        age = age1
    )

    # you don't need this. user = {'id':obj.id,'name':obj.name,'address':obj.address,'age':obj.age}

    data = {
        'user': obj,
        'dog': dog_obj,
    }
    return JsonResponse(data)'

Таким образом вы можете получить доступ из ваших шаблонов как:

{{ dog.name }} is the boss, and {{ user.name }} is not.

Например.

0 голосов
/ 30 апреля 2020

, если собака и пользователь не подключены (как в примере выше), я предлагаю сделать ajax go на другой URL для сохранения разных типов, таких как go до /User/add для сохранения пользователя и Dog/add для сохранение объекта собаки ... если вы хотите установить связь между ними, вам нужно использовать formset FormSet, это одна из замечательных вещей в Django, которая будет выглядеть как Django admin inline как pi c: admin Встроенная форма, связанная с основным объектом

...