早上好,
我真的很努力解决从我的 Django Rest Framework API 返回值的问题。
我有两个模型,SirTarget 和 Status。 SirTarget 就像一张工单,而 Status 是工单的文本状态标签,对应于处理工单的阶段。
型号如下:
class Status(models.Model):
status_text = models.CharField(max_length=20)
status_open = models.BooleanField(default=1)
def __str__(self):
return self.status_text
class SirTarget(models.Model):
name = models.CharField(max_length=70)
entry_date = models.DateTimeField(auto_now_add=True)
last_name = models.CharField(max_length=40)
first_name = models.CharField(max_length=40)
sir_status = models.ForeignKey(Status, on_delete=models.CASCADE, default=1, related_name='targets')
def __str__(self):
return '%d - %s %s' % (self.id, self.first_name, self.last_name)
我的序列化程序如下所示:
class SirTargetStatusSerializer(serializers.ModelSerializer):
status_text = serializers.ReadOnlyField(source='Status.status_text')
class Meta:
model = SirTarget
fields = '__all__'
字段 status_text 不会作为 API 调用的一部分返回。当我返回数据时,我收到状态表(1、2、3 等)的 PK,但我没有收到 status_text 字段。
我一直在纠结这个问题并挣扎着。我引用了类似的设置,例如在这篇文章中:
Retrieving a Foreign Key value with django-rest-framework serializers
然而,似乎没有什么对我有用。
编辑
我也试过:
status_text = serializers.RelatedField(source='sir_status.status_text', read_only=True)
和
status_text = serializers.CharField(source='sir_status.status_text', read_only=True)
当我直接查看数据库时,我看到了我正在寻找的内容并验证了这些值是否按预期填充:
# select * from sir_admin_status;
id | status_text | status_open
----+----------------+-------------
1 | New | t
2 | Open | t
3 | Referred | f
4 | Resolved | f
5 | False Positive | f
DRF 3.9.0
python 3.7.1
感谢您的帮助。
BCBB
最佳答案
你应该做
class SirTargetStatusSerializer(serializers.ModelSerializer):
status_text = serializers.CharField(source='sir_status.status_text', read_only=True)
class Meta:
model = SirTarget
fields = ('name', ... , 'status_text') # explicitly define all field you want here
关于django - DRF Serializer - 如何返回外键的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55902566/