2
大家好!Django Rest框架ParentRelatedField元數據選擇
我有最新Django的休息框架,我試圖使串行顯示可能的選擇爲每個字段上OPTIONS
請求。
這裏是我的模型
# models.py
class Task(models.Model):
parent = models.ForeignKey('self',
blank=True, null=True, related_name='child_tasks')
title = models.CharField(max_length=128)
status = models.CharField(max_length=16, choices=STATUS_CHOISES, default='new')
priority = models.CharField(max_length=16, choices=PRIORITY_CHOISES, default='1')
chief = models.ForeignKey('users.SystemUser', related_name='tasks',
blank=True, null=True)
的一部分,這裏的串行
# serializers.py
class ParentRelatedField(serializers.PrimaryKeyRelatedField):
def get_queryset(self):
obj = self.context['view'].get_object()
return Task.objects.exclude(pk=obj.pk)
def get_user_choices():
return tuple([(i.id, i.system_name) for i in SystemUser.objects.all()])
class TaskDetailSerializer(serializers.Serializer):
title = serializers.CharField()
parent = ParentRelatedField(
required=False, allow_null=True
)
status = serializers.ChoiceField(choices=STATUS_CHOISES)
priority = serializers.ChoiceField(choices=PRIORITY_CHOISES)
chief = serializers.ChoiceField(choices=get_user_choices(), required=False)
我實現了爲chief
場使用get_user_choices
功能,所以我得到:
"chief": {
"type": "choice",
"required": false,
"read_only": false,
"label": "Chief",
"choices": [
{
"value": 1,
"display_name": "First User Name"
}
]
}
ParentRelatedField
的偉大工程用於驗證,但不用於元數據:
"parent": {
"type": "field",
"required": false,
"read_only": false,
"label": "Parent"
}
我不能使用ChoiceField
與功能(如在chief
)對於因爲parent
選擇必須排除當前Task
對象。