Сериализация M2M-соединений Django Rest-framework со сквозной таблицей ⇐ Python
Сериализация M2M-соединений Django Rest-framework со сквозной таблицей
У меня есть следующие таблицы:
из моделей импорта django.db из django.contrib.auth.models импортировать AbstractUser класс Human(models.Model): _id = models.BigAutoField(primary_key=True) first_name = models.CharField(max_length=50, пусто=True) Last_name = models.CharField(max_length=50, пустое значение=True) изображение = models.ImageField(upload_to="pfpHuman", default="placeholderHuman.png") навыки = models.JSONField(по умолчанию=dict, пусто=True) is_active = models.BooleanField(по умолчанию=True) пользователь = модели.ForeignKey(Пользователь, on_delete=models.CASCADE) def __str__(self) -> str: вернуть self.first_name + " " + self.last_name Класс Компания(модели.Модель): класс Мета: verbose_name_plural = "Компании" _id = models.BigAutoField(primary_key=True) имя = модели.CharField(max_length=50, пустое значение=False) пользователь = модели.ForeignKey(Пользователь, on_delete=models.CASCADE) изображение = models.ImageField(upload_to="pfpCompany", default="placeholderCompany.png") защита __str__(сам): вернуть свое имя. класс Job(models.Model): _id = models.BigAutoField(primary_key=True) компания = модели.ForeignKey(Компания, on_delete=models.CASCADE) title = models.CharField(max_length=30, пусто=False) предпочтительные_навыки = модели.JSONField(по умолчанию=dict) Connections = models.ManyToManyField('Human',through="Connection", linked_name = 'job_human') защита __str__(сам): вернуть f'{self.title} - {self.company.name}' Соединение класса (модели.Модель): компания = модели.ForeignKey(Job, on_delete=models.CASCADE, default='', linked_name='company_to_job') human = models.ForeignKey(Human, on_delete=models.CASCADE, default='', linked_name='human_to_job') Did_human_accept = models.BooleanField(по умолчанию=False) Did_job_accept = models.BooleanField(по умолчанию=False) как видите, я попытался создать соединение «многие-ко-многим» для взаимодействия между работой и человеком
после нескольких поисков сообщений, Google, YouTube и многих других я нашел следующие сериализаторы:
класс HumanSerializer(ModelSerializer): класс Мета: модель = Человек поля = '__all__' класс CompanySerializer(ModelSerializer): класс Мета: модель = Компания поля = "__all__" класс ConnectionSerializer(ModelSerializer): класс Мета: модель = Соединение поля = '__all__' класс JobSerializer(ModelSerializer): human = HumanSerializer(many=True, read_only=True) # соединения = ConnectionSerializer(source = 'connection_set',many = True, read_only=True) класс Мета: модель = Работа поля = "__all__" глубина = 1 которые довольно просты теперь, когда я пытаюсь позвонить на сервер, я получаю вывод JSON:
[ { "_id": 1, "title": "testJob", "preferred_skills": { "навыки": "питон" }, "компания": { "_id": 1, "имя": "тесткомп", "image": "/images/placeholderCompany.png", "пользователь": 2 }, "связи": [ { "_id": 1, "first_name": "тест", "last_name": "пользователь", "image": "/images/placeholderHuman.png", "навыки": {}, «is_active»: правда, "пользователь": 1 } ] } ] внутри соединений[] все, что я получаю, это сериализованный человек, без добавленных данных, таких как did_human_accept и тому подобное
ожидаемый результат должен иметь что-то вроде:
"соединения": [ { (человеческая сериализация), (с серийным номером компании), «did_human_accept»: 0, "did_job_accept": 0, } ]
У меня есть следующие таблицы:
из моделей импорта django.db из django.contrib.auth.models импортировать AbstractUser класс Human(models.Model): _id = models.BigAutoField(primary_key=True) first_name = models.CharField(max_length=50, пусто=True) Last_name = models.CharField(max_length=50, пустое значение=True) изображение = models.ImageField(upload_to="pfpHuman", default="placeholderHuman.png") навыки = models.JSONField(по умолчанию=dict, пусто=True) is_active = models.BooleanField(по умолчанию=True) пользователь = модели.ForeignKey(Пользователь, on_delete=models.CASCADE) def __str__(self) -> str: вернуть self.first_name + " " + self.last_name Класс Компания(модели.Модель): класс Мета: verbose_name_plural = "Компании" _id = models.BigAutoField(primary_key=True) имя = модели.CharField(max_length=50, пустое значение=False) пользователь = модели.ForeignKey(Пользователь, on_delete=models.CASCADE) изображение = models.ImageField(upload_to="pfpCompany", default="placeholderCompany.png") защита __str__(сам): вернуть свое имя. класс Job(models.Model): _id = models.BigAutoField(primary_key=True) компания = модели.ForeignKey(Компания, on_delete=models.CASCADE) title = models.CharField(max_length=30, пусто=False) предпочтительные_навыки = модели.JSONField(по умолчанию=dict) Connections = models.ManyToManyField('Human',through="Connection", linked_name = 'job_human') защита __str__(сам): вернуть f'{self.title} - {self.company.name}' Соединение класса (модели.Модель): компания = модели.ForeignKey(Job, on_delete=models.CASCADE, default='', linked_name='company_to_job') human = models.ForeignKey(Human, on_delete=models.CASCADE, default='', linked_name='human_to_job') Did_human_accept = models.BooleanField(по умолчанию=False) Did_job_accept = models.BooleanField(по умолчанию=False) как видите, я попытался создать соединение «многие-ко-многим» для взаимодействия между работой и человеком
после нескольких поисков сообщений, Google, YouTube и многих других я нашел следующие сериализаторы:
класс HumanSerializer(ModelSerializer): класс Мета: модель = Человек поля = '__all__' класс CompanySerializer(ModelSerializer): класс Мета: модель = Компания поля = "__all__" класс ConnectionSerializer(ModelSerializer): класс Мета: модель = Соединение поля = '__all__' класс JobSerializer(ModelSerializer): human = HumanSerializer(many=True, read_only=True) # соединения = ConnectionSerializer(source = 'connection_set',many = True, read_only=True) класс Мета: модель = Работа поля = "__all__" глубина = 1 которые довольно просты теперь, когда я пытаюсь позвонить на сервер, я получаю вывод JSON:
[ { "_id": 1, "title": "testJob", "preferred_skills": { "навыки": "питон" }, "компания": { "_id": 1, "имя": "тесткомп", "image": "/images/placeholderCompany.png", "пользователь": 2 }, "связи": [ { "_id": 1, "first_name": "тест", "last_name": "пользователь", "image": "/images/placeholderHuman.png", "навыки": {}, «is_active»: правда, "пользователь": 1 } ] } ] внутри соединений[] все, что я получаю, это сериализованный человек, без добавленных данных, таких как did_human_accept и тому подобное
ожидаемый результат должен иметь что-то вроде:
"соединения": [ { (человеческая сериализация), (с серийным номером компании), «did_human_accept»: 0, "did_job_accept": 0, } ]
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как решить проблему задержки с помощью django M2M и filter_horizontal в панели ModelAdmin?
Anonymous » » в форуме Python - 0 Ответы
- 17 Просмотры
-
Последнее сообщение Anonymous
-