英文:
Django REST nested serializers
问题
I'm new to Django and Django Rest here.
我是Django和Django Rest的新手。
I created 3 models (see below).
我创建了3个模型(如下所示)。
I'm able to create some easy and basic serializers for each of those models, but I would like to create a more complex serializer for the CustomUser
models than returns for each user it's roles.
我能够为这些模型中的每一个创建一些简单和基本的序列化程序,但我想为CustomUser
模型创建一个更复杂的序列化程序,以返回每个用户的角色。
I've read the "Serializer relations" section in the doc. It's still not very clear how to achieve it.
我已经阅读了文档中的“序列化器关系”部分。如何实现还不是很清楚。
In the examples they use 2 models relations, but if I'm not wrong, I have 3, making things more complicated for me to understand.
在示例中,他们使用了2个模型关系,但如果我没有理解错的话,我有3个模型,这让我更难理解。
Could someone give me some tips to do it?
有人能给我一些提示吗?
class CustomUser(AbstractUser):
class CustomUser(AbstractUser):
email = models.EmailField(unique=True)
email = models.EmailField(unique=True)
username = models.CharField(max_length=100)
username = models.CharField(max_length=100)
USERNAME_FIELD = 'email'
USERNAME_FIELD = 'email'
class Meta:
class Meta:
db_table = "MyUsers"
db_table = "MyUsers"
def str(self):
def str(self):
return self.email
return self.email
class Roles(models.Model):
class Roles(models.Model):
id = models.AutoField(primary_key=True)
id = models.AutoField(primary_key=True)
label = models.CharField(max_length=100, related_name="roles_label")
label = models.CharField(max_length=100, related_name="roles_label")
class Meta:
class Meta:
db_table = "roles"
db_table = "roles"
def str(self):
def str(self):
return self.label
return self.label
class RolesUsers(models.Model):
class RolesUsers(models.Model):
id_user = models.ForeignKey(CustomUser, related_name="id_user", on_delete=models.CASCADE)
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)
id_role = models.ForeignKey(Roles, related_name="id_role", on_delete=models.CASCADE)
class Meta:
class Meta:
db_table = "roles_users"
db_table = "roles_users"
unique_together = (("id_user", "id_role"),)
unique_together = (("id_user", "id_role"),)
def str(self):
def str(self):
return '{}: {}'.format(self.id_role, self.id_user)
英文:
I'm new to Django and Django Rest here.
I created 3 models (see below).
I'm able to create some easy and basic serializers for each of those models, but I would like to create a more complex serializer for the CustomUser
models than returns for each user it's roles.
I've read the "Serializer relations" section in the doc. It's still not very clear how to achieve it.
In the examples they uses 2 models relations, but if I'm not wrong, I have 3, making things more complicated for me to understand.
Could someone give me some tips to do it?
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
相关名称应具有有意义的名称
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 = (("user", "role"),)
def __str__(self):
return '{}: {}'.format(self.role, self.user)
你可以创建用户序列化器
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = CustomUser
fields = ('id', 'user_role', 'email', 'username')
英文:
related name should be meaning full name
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)
you can create user serializer
class UserSerializer(serializer.ModelSerializers):
class Meta:
model = CustomUser
fields = ('id', 'user_role', 'email', 'username')
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论