Как создать сериализатор и представление для создания подкатегории в django и djangorestframework - PullRequest
1 голос
/ 01 апреля 2019

Я создал три класса 1. Программа - родитель - пример Бакалавр искусств (BA) 2. Семестр - ребенок - первый семестр - ребенок программы 3. Курс - внучка - Химия-1, семестр

Деталь: 1) В программе будет много семестров, ссылка с использованием внешнего ключа 2) В течение семестра будет много курсов.

Как реализовать это поведение в djangorestframework. 1) Создайте курс в течение семестра 2) перечислить все курсы по программе и семестру

class Programme(models.Model):
     name = models.CharField(max_length=255)
     def __str__(self):
          return self.name


class Semester(models.Model):
     name = models.CharField(max_length=100)
     numeric = models.IntegerField()
     programme = models.ForeignKey(Programme, 
             on_delete=models.CASCADE)

     def __str__(self):
        return self.name

class Course(models.Model):
    name = models.CharField(max_length=200)
    code = models.CharField(max_length=200)
    semester = models.ForeignKey(Semester,
         on_delete=models.CASCADE,related_name='courses')
    internal = models.IntegerField()
    external = models.IntegerField()
    total = models.IntegerField()

    def __str__(self):
        return self.name

1 Ответ

1 голос
/ 01 апреля 2019

вам нужно будет использовать поле метода в сериализаторе и добавить его как поле exptra в мета-класс класса, чтобы получить полный список и подкатегорию:

serializer.py

class courseserializer(serializers.ModelSerializer):
   class Meta:
      model = course
      fields = '__all__'

class semesterserilizer(serializers.ModelSerializer):
   course=serializers.SerializerMethodField()
   class Meta:
      model = course
      fields = ['name','course']
   def get_course(self,obj):
       queryset=course.objects.filter(id=obj.id)
       return courseserializer(queryset,many=True).data

То же самое вы должны сделать с программой, чтобы получить и сериализатор внутри программы, и, в поле зрения, передать набор запросов в родительский серилизатор, который будет извлекать соответствующие данные, как мы указали в серилизаторе.

...