Отсутствие извлеченных данных в связанной таблице/модели в django
У меня есть api, который будет извлекать данные фермера, теперь я извлек основной профиль, но не детали в посылках.
model.py
from django.db import models
class Farmer(models.Model):
record_no = models.CharField(primary_key=True,max_length=19)
control_no = models.CharField(max_length=50)
fname = models.CharField(max_length=100)
mname = models.CharField(max_length=100)
lname = models.CharField(max_length=100)
ename = models.CharField(max_length=100)
sex = models.CharField(max_length=6)
birthday = models.DateField(blank=True, null=True)
arb = models.CharField(max_length=3)
pwd = models.CharField(max_length=3)
ben_4ps = models.CharField(max_length=3)
ip = models.CharField(max_length=3)
tribe_name = models.CharField(max_length=100)
fca_mem = models.CharField(max_length=3)
fca_name = models.CharField(max_length=200)
house_no = models.CharField(max_length=100)
street = models.CharField(max_length=100)
region_code = models.CharField(max_length=2)
region_shortname = models.CharField(max_length=50)
region_longname = models.CharField(max_length=150)
province_code = models.CharField(max_length=2)
province_name = models.CharField(max_length=150)
municipality_code = models.CharField(max_length=2)
municipality_name = models.CharField(max_length=150)
brgy_code = models.CharField(max_length=2)
brgy_name = models.CharField(max_length=150)
farm_size = models.DecimalField(max_digits=10,decimal_places=4)
class Meta:
managed = False
db_table = 'farmers'
class Parcels(models.Model):
record_no = models.ForeignKey(Farmer,null=True, db_column='record_no',on_delete=models.CASCADE)
parcel_no = models.IntegerField()
parcel_farm_area = models.DecimalField(max_digits=10,decimal_places=4)
type_of_ownership = models.CharField(max_length=100)
presented_doc = models.CharField(max_length=100)
reg_name = models.CharField(max_length=100)
prov_name = models.CharField(max_length=100)
mun_name = models.CharField(max_length=100)
bgy_name = models.CharField(max_length=100)
class Meta:
managed = False
db_table = 'parcels'
serializers.py
from rest_framework import serializers
from .models import Farmers, Parcels
class ParcelDetailSerializer(serializers.ModelSerializer):
class Meta:
model = Parcels
fields = ['record_no','parcel_no','parcel_farm_area','type_of_ownership','presented_doc','reg_name','prov_name','mun_name','bgy_name']
class FarmerDetailSerializer(serializers.ModelSerializer):
parcels = ParcelDetailSerializer(many=True, read_only=True)
class Meta:
model = Farmers
fields = ['control_no','record_no','fname','mname','lname','ename','sex','birthday','arb','pwd','ben_4ps','ip','tribe_name','fca_mem','fca_name','house_no','street','region_code','region_shortname','region_longname','province_code','province_name','municipality_code','municipality_name','brgy_code','brgy_name','farm_size','parcels']
views.py
from django.shortcuts import render
from rest_framework.decorators import api_view, permission_classes
from rest_framework.response import Response
from rest_framework.generics import get_object_or_404
from .models import Farmers
from .serializers import FarmerDetailSerializer
@api_view(['GET'])
def farmerDetails(request):
first_name = request.GET.get("fname")
middle_name = request.GET.get("mname")
last_name = request.GET.get("lname")
birthday = request.GET.get("birthdate")
details = Farmers.objects.using("farmers_db").filter(fname=first_name, mname=middle_name, lname=last_name, birthday=birthday)
detailSerializer = FarmerDetailSerializer(details, many=True)
return Response(detailSerializer.data)
вывод будет
[
{
"control_no": "01-01-33-030-070000",
"record_no": "01-33-03-007-000001",
"fname": "ALBERT",
"mname": "PASCUA",
"lname": "MARTINEZ",
"ename": "",
"sex": "MALE",
"birthday": "1963-12-09",
"arb": "NO",
"pwd": "NO",
"ben_4ps": "NO",
"ip": "NO",
"tribe_name": null,
"fca_mem": "NO",
"fca_name": null,
"house_no": "",
"street": "BARORO",
"region_code": "01",
"region_shortname": "RFO I",
"region_longname": "REGION I (ILOCOS REGION)",
"province_code": "33",
"province_name": "LA UNION",
"municipality_code": "03",
"municipality_name": "BACNOTAN",
"brgy_code": "007",
"brgy_name": "Baroro",
"farm_size": "0.8500"
#there should be data of parcels here with many records
}
]
Как вы можете видеть на выходе, нет атрибута parcel, хотя я добавил его в сериализаторе, а затем установил models.ForeignKey в модели. Как я могу правильно получить основной профиль вместе со связанной моделью, используя Foreignkey в сериализаторе?