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
JavaScript
x
46
46
1
from django.db import models
2
3
class Order(models.Model):
4
order_id = models.PositiveIntegerField(blank=True, null=True)
5
orderstext = models.CharField(max_length=250, blank=True, null=True, )
6
order_start = models.DateTimeField(blank=True, null=True)
7
order_end = models.DateTimeField(blank=True, null=True)
8
9
@property
10
def default(self):
11
return self.orderstext
12
13
class Meta:
14
managed = False
15
db_table = 'order'
16
17
18
19
class Archives(models.Model):
20
archive_id = models.AutoField(primary_key=True, null=False)
21
archivename = models.CharField(max_length=50, unique=True, blank=True, null=True)
22
deleted = models.IntegerField(blank=True, null=True)
23
24
def __str__(self):
25
return self.archivename
26
27
@property
28
def default(self):
29
return self.archivename
30
31
class Meta:
32
managed = False
33
db_table = 'archives'
34
35
36
class Clients(models.Model):
37
name = models.CharField(max_length=20, verbose_name="Name")
38
lastname = models.CharField(max_length=50, blank=True, null=True, verbose_name="Lastname")
39
archives = models.ForeignKey('Archives', db_column='archive_id', on_delete=models.CASCADE, null=True, verbose_name="Archives")
40
order = models.ForeignKey('Order', db_column='order_id', on_delete=models.CASCADE, null=True, verbose_name="Order")
41
coments = models.CharField(max_length=250, blank=True, null=True, verbose_name="Coments")
42
43
class Meta:
44
managed = False
45
db_table = 'clients'
46
views.py
JavaScript
1
11
11
1
from django.http import JsonResponse
2
3
from .models import Clients
4
5
def data_json:
6
info = list(Clients.objects.all().values())
7
response = {'clients': info}
8
9
return JsonResponse(response)
10
11
urls.py
JavaScript
1
8
1
from django.urls import path
2
3
from . import views
4
5
urlpatterns = [
6
path('clients-info/', views.data_json, name='data_json'),
7
]
8
JSON Response
JavaScript
1
11
11
1
{
2
"clients": {
3
"id": 4,
4
"name": "First",
5
"lastname": "Last Name",
6
"archive_id": 6,
7
"order_id": 3,
8
"coments": "No comments"
9
}
10
}
11
Advertisement
Answer
You can annotate
..[Django-doc] the clients queryset with the orderstext
and archivename
along side F-expressions
..[Django-doc] like this:
JavaScript
1
7
1
from django.db.models import F
2
3
Clients.objects.annotate(
4
archivename=F("archives__archivename"),
5
orderstext=F("order__orderstext"),
6
).values()
7
Although instead of using values
I highly recommend using something like DRF serializers
..[DRF-doc] to handle serialization of your data.