У меня есть модель, у которой есть один класс, который состоит из множества других, использующих OneToOneField. Моя конечная цель состоит в том, чтобы иметь возможность абстрактно (* без использования имен полей) l oop просматривать структуру данных и выводить содержимое в мой шаблон с помощью тегов шаблона. Я хотел бы предоставить свой шаблон с вложенными данными в формате json и парсингом json, используя теги шаблона непосредственно в моем шаблоне. Я кое-что использовал Django. Ниже приведен общий пример c моей кодовой базы:
models.py--------------------------------------
from django.db import models
from rest_framework import serializers
class Class1(models.Model):
class_1_field_1 = models.CharField()
class_1_field_2 = models.CharField()
class Class2(models.Model):
class_2_field_1 = models.CharField()
class_2_field_2 = models.CharField()
class MainClass(models.Model):
field_1 = models.CharField()
field_2 = models.IntegerField()
field_3 = models.DateTimeField()
class_1 = models.OneToOneField(Class1, on_delete=models.CASCADE,)
class_2 = models.OneToOneField(Class2, on_delete=models.CASCADE,)
class Class1Serializer(serializers.ModelSerializer):
class Meta:
model = Class1
fields = ('class_1_field_1', 'class_1_field_2')
class Class2Serializer(serializers.ModelSerializer):
class Meta:
model = Class2
fields = ('class_2_field_1', 'class_2_field_2')
class MainClassSerializer(serializers.ModelSerializer):
class_1= Class1Serializer()
class_2= Class2Serializer()
class Meta:
model = MainClass
fields = ('field1', 'field2', 'field3', 'class_1', 'class_2')
views.py-------------------------------------
from django.views.generic import ListView
from rest_framework.renderers import JSONRenderer
from MyApp.models import MainClass, MainClassSerializer
MainClassListView(ListView):
context_object_name = 'mainclasses'
model = MainClass
serializer_class = MainClassSerializer
def get_queryset(self):
object_list = MainClass.objects.filter(user__in=[self.request.user])
return object_list
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
serializer = MainClassSerializer(MainClass.objects.filter(user__in=[self.request.user]), many=True)
context['data'] = JSONRenderer().render(serializer.data)
return context
def dispatch(self, request, *args, **kwargs):
return super(MainClassListView, self).dispatch(request, *args, **kwargs)
index.html----------------------------------------------------
...
{{data}}
...
json output-------------------------------------------------------
b'[{
"field_1": "Some String",
"field_2": 100,
"field_3": "2020-04-20T02:34:27.912451Z",
"class_1": {
"class_1_field_1": "str_1",
"class_1_field_2": "str_2"
},
"class_2": {
"class_2_field_1": "str_3",
"class_2_field_2": "str_4"
}
}]'
Тег {{data}}
отображает строку (см. Выше) в следующем формате: b'[valid_json_is_displayed_here]'
, где valid_json_is_displayed_here
- это json правильно отформатированная структура, которая включает в себя вложенные данные из отношений OneToOneField.
Я хотел бы проанализировать отдельные значения в возвращенном выводе json в тегах шаблона непосредственно в моем шаблоне, включая однозначный одна связь данных. Возможно ли это в Django и как я могу выполнить sh это? Я чувствую, что все должно быть просто, чего мне не хватает?
Спасибо.