Django REST вложенные сериализаторы - PullRequest
0 голосов
/ 06 января 2020

Я новичок в Django и Django Отдых здесь.

Я создал 3 модели (см. Ниже).

Я могу создать несколько простых и базовых c сериализаторов для каждой из этих моделей, но я хотел бы создать более сложный сериализатор для CustomUser моделей, чем возвращает для каждого пользователя его роли.

Я читал раздел «Связи с сериализатором» в до c. До сих пор не очень ясно, как этого добиться.

В примерах они используют отношения 2 моделей, но если я не ошибаюсь, у меня 3, что усложняет понимание вещей.

Может кто-нибудь дать мне несколько советов, как это сделать?

class CustomUser(AbstractUser):

    email = models.EmailField(unique=True)
    username = models.CharField(max_length=100)
    USERNAME_FIELD = 'email'

    class Meta:
        db_table = "MyUsers"
    def __str__(self):
        return self.email

class Roles(models.Model):
    id = models.AutoField(primary_key=True)
    label = models.CharField(max_length=100,related_name="roles_label")
    class Meta:
        db_table = "roles"
    def __str__(self):
        return self.label

class RolesUsers(models.Model):
    id_user = models.ForeignKey(CustomUser,related_name="id_user", on_delete=models.CASCADE)
    id_role = models.ForeignKey(Roles, related_name="id_role", on_delete=models.CASCADE)
    class Meta:
        db_table = "roles_users"
        unique_together = (("id_user", "id_role"),)
    def __str__(self):
        return '{}: {}'.format(self.id_role, self.id_user)

1 Ответ

0 голосов
/ 06 января 2020

связанное имя должно означать полное имя

class RolesUsers(models.Model):
    user = models.ForeignKey(CustomUser,related_name="user_role", on_delete=models.CASCADE)
    role = models.ForeignKey(Roles, related_name="user_role", on_delete=models.CASCADE)
    class Meta:
        db_table = "roles_users"
        unique_together = (("id_user", "id_role"),)
    def __str__(self):
        return '{}: {}'.format(self.id_role, self.id_user)

Вы можете создать пользовательский сериализатор


class UserSerializer(serializer.ModelSerializers):
   class Meta:
         model = CustomUser
         fields = ('id', 'user_role', 'email', 'username')
...