django - Initializing drf Serializer
问题描述
I have two models: User and Employee. I want to return following json via drf: [ { 'admin': {}, 'employee': [{}, {}] }, { 'admin': {}, 'employee': [{}, {}] } ].
However, I don't understand how to initialize a TeamSerializer with data. What should I pass into TeamSerializer
class Meta:
model = User
fields = [
"first_name",
"last_name",
"email",
"hourly_rate",
"role",
]
class EmployeeSerializer(serializers.ModelSerializer):
class Meta:
model = Employee
fields = [
"first_name",
"last_name",
"email",
"hourly_rate",
"role",
]
class TeamSerializer(serializers.Serializer):
admin = AdminSerializer()
employee = EmployeeSerializer()
解决方案
You will need to create a model for team to specify the relation.
If I understand right, each team has an admin and multiple employees, each employee can be member of one team, and an admin can administer one team. so one to one relation for admin and one to many relation for employee.
The model should look like this:
class Team(models.Model):
admin = models.OneToOneField(get_user_model(), on_delete=models.SET_NULL, null=True)
class Employee(models.Model):
user = models.OneToOneField(get_user_model(), on_delete=models.CASCADE)
team = models.ForeignKey(Team, on_delete=models.CASCADE, related_name="employees")
# all the rest of your fields here
Then create a serializer for Team
:
class TeamSerializer(serializers.ModelSerializer):
admin = UserSerializer()
employees = EmployeeSerializer()
class Meta:
model = Team
fields = ["admin", "employees"]
I would take that even farder and create a Admin
model and AdminSerializer
also to provide more information about the admin, but it depends on your needs.
推荐阅读
- android - Flutter 无法在设备导入 androidx.annotation.Nullable 上运行应用程序
- selenium - Windows 10 - chromedriver.exe 返回我只允许本地连接
- mongodb - 如何删除嵌入在 MongoDB 子数组中的子文档(按 Id)?
- ecmascript-6 - 如何在 JSDoc 3 和 Babel.js 中使用装饰器?
- java - 为什么 Thread.join 的行为不符合预期
- mysql - 从表中找到至少在这些技术[reactjs, mysql, express] 方面工作过的人
- azure-ad-b2c - 如何找出导致 Azure B2C 500 内部服务器错误的原因?
- python - 根据第二个DataFrame的顺序和命名缩小一个DataFrame的形状
- recursion - 试图理解递归以及为什么会发生错误
- java - 为什么java允许导入在同一个文件中定义的类?