Создайте набор запросов, который автоматически запрашивает объекты один к одному

Я создаю приложение django, в котором есть модель с несколькими OneToOne отношениями:

class MyApp(BaseModel):
    site_1 = models.OneToOneField(
        Site, on_delete=models.CASCADE, related_name="site1", null=True
    )
    site_2 = models.OneToOneField(
        Site, on_delete=models.CASCADE, related_name="site2", null=True
    )
    site_3 = models.OneToOneField(
        Site, on_delete=models.CASCADE, related_name="site3", null=True
    )

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = "Main Application"
        verbose_name_plural = "Main Application"

Когда я создаю набор запросов с помощью MyApp.objects.all(), он возвращает объект, содержащий только первичные ключи:

    {
    "model": "mesoamerica.mesoamericaapp",
    "pk": 1,
    "fields": {
      "site_1": 1,
      "site_2": 2,
      "site_3": 3
    }

Однако я хотел бы создать набор queryset, который будет захватывать каждую из Site моделей по pk и присоединять их к запросу, а не делать это самостоятельно. Существует ли набор queryset, который может это сделать?

Вы можете сделать следующее:

def my_app_data(request):
queryset = MyApp.objects.prefetch_related('site1', 'site2', 'site3').all()

# Serialize queryset to JSON
data = serialize('json', queryset)

# Return JSON response
return JsonResponse(data, safe=False)

но если вы хотите написать классы сериализатора для своего сайта и модели myapp, посмотрите документ: https://www.django-rest-framework.org/tutorial/1-serialization/

Вернуться на верх