0
型號:嵌套對象DRF保存
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瀏覽器中測試)我還需要添加新的所有者對象 - 我不想要它,我想使用現有的所有者對象。我怎樣才能實現它?
您需要重寫'ThingSerializer'中的'.create'或/和'.update'方法,[查看DRF文檔](http://www.django-rest-framework.org/api-guide/serializers /#可寫嵌套表示) – devxplorer
DRF不會自動爲您處理。正如Wonder說的,覆蓋你的序列化程序的創建/更新方法。 –
是的,這部分工作,因爲我希望它(我可以做任何我想在這些方法)。但它不會替換DRF瀏覽器內置POST表單中的字段 - 我仍然擁有Owner's * name *字段,而不是所有者的下拉列表。 – MoonWolf