【发布时间】:2021-03-03 08:19:25
【问题描述】:
我有一个像下面这样的家庭模型
class Family(models.Model):
name = models.CharField(max_length=255)
address = models.CharField(max_length=500, blank=False)
monthly_contribution = models.FloatField(default=0)
enabled = models.BooleanField(default=True)
def __str__(self):
return self.name + f' ({self.address})'
我有一个像下面这样的教区居民模型
class Parishioner(models.Model):
def _age(self):
return date.today().year - self.dob.year
"""Parishioner model"""
id = models.CharField(primary_key=True, max_length=1000, default=get_next_parishoner_id)
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
dob = models.DateField()
age = property(_age)
GENDER_CHOICES = [("Male", "Male"), ("Female", "Female"), ("Other", "Other")]
gender = models.CharField(max_length=10, choices=GENDER_CHOICES)
address = models.CharField(max_length=1000)
fathers_name = models.CharField(max_length=500)
mothers_name = models.CharField(max_length=500)
baptism_certificate = models.ImageField(null=True, upload_to=upload_image)
marriage_certificate = models.ImageField(null=True, upload_to=upload_image)
family = models.ForeignKey(Family, null=True, on_delete=models.PROTECT)
role = models.CharField(null=True, max_length=255)
def __str__(self):
return self.first_name + " " + self.last_name
这是我的家庭视图
class FamilyViewSet(viewsets.ModelViewSet):
queryset = Family.objects.all()
serializer_class = FamilySerializer
authentication_classes = (TokenAuthentication,)
permission_classes = (IsAuthenticated,)
这是我的教区居民观点
class ParishionerViewSet(viewsets.ModelViewSet):
queryset = Parishioner.objects.all()
serializer_class = serializers.ParishionerSerializer
authentication_classes = (TokenAuthentication,)
permission_classes = (IsAuthenticated,)
这是我的家庭序列化程序
class FamilySerializer(serializers.ModelSerializer):
members = ParishionerSerializer(read_only=True, many=True)
class Meta:
model = Family
fields = ('id', 'name', 'address', 'monthly_contribution','members', 'enabled')
read_only_fields = ('id','members',)
这是我的 Parishioner 序列化程序
class ParishionerSerializer(serializers.ModelSerializer):
class Meta:
model = Parishioner
fields = ('id','first_name', 'last_name', 'dob', 'age', 'gender', 'address', 'fathers_name', 'mothers_name', 'baptism_certificate', 'marriage_certificate', 'family', 'role')
read_only_fields = ('id',)
所以关系是一对多的。 教区居民可以存在于一个家庭中。 一个家庭有很多成员(教区居民)。
当我打电话给我的 /api/family/ 时,我得到了以下响应
[
{
"id": 13,
"name": "Mendis Family",
"address": "No 48, Katukurunda",
"monthly_contribution": 50.0,
"enabled": false
},
{
"id": 14,
"name": "Perera Family",
"address": "No 40",
"monthly_contribution": 20.0,
"enabled": true
}
]
是否可以在成员属性(数组)的响应中获取所有成员? 像下面这样?
[
{
"id": 13,
"name": "Mendis Family",
"address": "No 48, Katukurunda",
"monthly_contribution": 50.0,
"members":[{"id":"1", "first_name":"John",...etc},
{"id":"2", "first_name":"Jane",...etc}],
"enabled": false
},
{
"id": 14,
"name": "Perera Family",
"address": "No 40",
"monthly_contribution": 20.0,
"members":[{"id":"3", "first_name":"Jackie",...etc},
{"id":"4", "first_name":"Jockie",...etc}]
"enabled": true
}
]
【问题讨论】:
标签: python-3.x django django-models django-rest-framework django-views