I just started with Django and Python and I still don’t understand it very well. Would it be possible to access all the information stored in Persons, showing also orderstext and archivename, I can’t manage to do it :( my idea is to get all the information and save it as JSON, but I’m not getting the info from orderstext and archivename, it would be great if someone could show me the right way.
models.py
from django.db import models
class Order(models.Model):
    order_id = models.PositiveIntegerField(blank=True, null=True)
    orderstext = models.CharField(max_length=250, blank=True, null=True, )
    order_start = models.DateTimeField(blank=True, null=True)
    order_end = models.DateTimeField(blank=True, null=True)
    @property
    def default(self):
        return self.orderstext
    class Meta:
        managed = False
        db_table = 'order'
class Archives(models.Model):
    archive_id = models.AutoField(primary_key=True, null=False)
    archivename = models.CharField(max_length=50, unique=True, blank=True, null=True)
    deleted = models.IntegerField(blank=True, null=True)
    def __str__(self):
        return self.archivename 
    @property
    def default(self):
        return self.archivename
    class Meta:
        managed = False
        db_table = 'archives'
class Clients(models.Model):
    name = models.CharField(max_length=20, verbose_name="Name")
    lastname = models.CharField(max_length=50, blank=True, null=True, verbose_name="Lastname")
    archives = models.ForeignKey('Archives', db_column='archive_id', on_delete=models.CASCADE, null=True, verbose_name="Archives")
    order = models.ForeignKey('Order', db_column='order_id', on_delete=models.CASCADE, null=True, verbose_name="Order")
    coments = models.CharField(max_length=250, blank=True, null=True, verbose_name="Coments")
    class Meta:
        managed = False
        db_table = 'clients'
views.py
from django.http import JsonResponse
from .models import Clients
def data_json:
    info = list(Clients.objects.all().values())
    response = {'clients': info}
    
    return JsonResponse(response)
urls.py
from django.urls import path
from . import views
urlpatterns = [
    path('clients-info/', views.data_json, name='data_json'),
]
JSON Response
{
  "clients": {
    "id": 4,
    "name": "First",
    "lastname": "Last Name",
    "archive_id": 6,
    "order_id": 3,
    "coments": "No comments"
  }
}
Advertisement
Answer
You can annotate..[Django-doc] the clients queryset with the orderstext and archivename along side F-expressions..[Django-doc] like this:
from django.db.models import F
Clients.objects.annotate(
    archivename=F("archives__archivename"), 
    orderstext=F("order__orderstext"),
).values()
Although instead of using values I highly recommend using something like DRF serializers..[DRF-doc] to handle serialization of your data.