型号:
class Owner(models.Model):
name = models.CharField(max_length=255)
def __unicode__(self):
return self.name
class SomeThing(models.Model):
own_id = models.IntegerField(unique=True)
description = models.CharField(max_length=255, blank=True)
owner = models.ForeignKey(Owner, blank=True, null=True)
def __unicode__(self):
return self.description
串行器:
class OwnerNameField(serializers.RelatedField):
def to_internal_value(self, data):
pass
def to_representation(self, value):
return value.name
def get_queryset(self):
queryset = self.queryset
if isinstance(queryset, (QuerySet, Manager)):
queryset = queryset.all()
lista = [Owner(name="------------")]
lista.extend(queryset)
return lista
class OwnerSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Owner
fields = ('name', 'id')
class ThingSerializer(serializers.ModelSerializer):
owner = OwnerNameField(queryset=Owner.objects.all())
class Meta:
model = SomeThing
fields = ('own_id', 'description', 'owner')
基本上它按预期工作。但是当我向所有者类添加一些字段时,我希望在 ThingSerializer 的输出中看到所有这些字段(并且能够解析它们 - 字符串不适合这里) 。我可以将字段所有者更改为owner = OwnerSerializer()
,这可以为我提供所需内容。但是,当我想添加 SomeThing 对象(在API浏览器中测试)时,我还需要添加新的所有者对象 - 我不想要它,我想使用现有的所有者对象。我怎样才能实现它?