Получение атрибутов из модели, связанной с внешним ключом, в другую модель поля, связанную с внешним ключом - PullRequest
0 голосов
/ 25 июня 2019

Итак, у меня есть три модели, которые связаны друг с другом в разных отношениях. Во-первых, модель Родителя, которая связана с учащимся, использующим отношение внешнего ключа, а также модель учащегося, связана с моделью посещаемости, использующей отношение внешнего ключа. Я хочу создать сериализатор, в котором я могу получать данные о посещаемости каждого ребенка родителей отдельно. Как это может быть сделано?

models.py


class Parent(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True, default=None)
    child = models.ForeignKey(Student, on_delete=models.CASCADE)
    email = models.EmailField(null=True)

    def __str__(self):
        return self.user.firstName + ' ' + self.user.lastName

class Student(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True, default=None)
    batch = models.ForeignKey(Batch, on_delete=models.CASCADE, null=True, related_name='students')
    age = models.IntegerField(blank=True)

    @property
    def remarks(self):
        return self.remark_set.all()

    @property
    def marks(self):
        return self.marks_set.all()

    def __str__(self):
        return self.user.firstName + ' ' + self.user.lastName

class Attendance(models.Model):
    Subject = models.ForeignKey(Subject, on_delete=models.CASCADE, null=True)
    class_date = models.DateField(blank=True, null=True)
    student = models.ForeignKey(Student, related_name='student_today', on_delete=models.CASCADE, null=True)
    present = models.NullBooleanField(default=False)

    def __str__(self):
        return str(self.class_date) + '_' + str(self.student.user.username) + '_' + str(self.Subject.name)

serilaizers.py

class BasicUserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('firstName', 'lastName')


class BasicStudentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Student
        fields = ('batch', 'age')


class ParentSerializer(serializers.ModelSerializer):
    user = BasicUserSerializer(read_only=True, many=False)
    child = BasicStudentSerializer(read_only=True,  many= False)

    class Meta:
        model = Parent
        fields = "__all__"

views.py

class ParentView( mixins.ListModelMixin, mixins.RetrieveModelMixin,viewsets.GenericViewSet):
    queryset = Parent.objects.all()
    serializer_class = serializers.ParentSerializer
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...