Django rest framework DRF如何解析文本字段并将结果序列化到模型集
我在Django rest framework DRF如何解析文本字段并将结果序列化到模型集,django-rest-framework,Django Rest Framework,我在models.py中有下一个模型 class Rule(models.Model): name = models.CharField(max_length=30) description = models.TextField() class Question(models.Model): question = models.TextField(default='') answer = models.TextField(default='') rule
models.py中有下一个模型
class Rule(models.Model):
name = models.CharField(max_length=30)
description = models.TextField()
class Question(models.Model):
question = models.TextField(default='')
answer = models.TextField(default='')
rules = models.TextField(default='') # here I decided to store rules names only, separated by coma
class RuleSerializer(serializers.ModelSerializer):
class Meta:
model = Rule
fields = ['name', 'description']
class QuestionSerializer(serializers.ModelSerializer):
class Meta:
model = Question
fields = ['question', 'answer', 'rules']
我在serializers.py中有下一个序列化程序
class Rule(models.Model):
name = models.CharField(max_length=30)
description = models.TextField()
class Question(models.Model):
question = models.TextField(default='')
answer = models.TextField(default='')
rules = models.TextField(default='') # here I decided to store rules names only, separated by coma
class RuleSerializer(serializers.ModelSerializer):
class Meta:
model = Rule
fields = ['name', 'description']
class QuestionSerializer(serializers.ModelSerializer):
class Meta:
model = Question
fields = ['question', 'answer', 'rules']
作为结果输出,我有下一个JSON
[
{
"question": "How are you?",
"answer": "fine",
"rules": "rule 1, rule 2, rule 3"
}
]
但是如何将规则
字符串转换为对象呢?我找到了一个解决方案,但这意味着我应该手动转换/序列化规则
class RuleSerializer(serializers.ModelSerializer):
class Meta:
model = Rule
fields = ['name', 'description']
class QuestionSerializer(serializers.ModelSerializer):
rules = serializers.SerializerMethodField()
class Meta:
model = Question
fields = ['question', 'answer', 'rules']
def get_rules(self, obj):
names = [name.strip() for name in obj.rules.split(",")]
rules = Rule.objects.all().filter(name__in=names)
return [{
"name": rule.name,
"description": rule.description,
} for rule in rules]
当然我可以手动完成,但是如何使用现有的序列化程序来完成呢
def get_rules(self, obj):
names = [name.strip() for name in obj.rules.split(",")]
rules = Rule.objects.all().filter(name__in=names)
serializer = RuleSerializer(rules)
serializer.is_valid() # Mandatory
return serializer.data