我有两个模型(代码已简化):
class Document(models.Model):
data = JSONField()
class Item(models.Model):
name = models.CharField(max_length=10)
doc = models.OneToOneField(
Document,
blank=True, null=True,
on_delete=models.SET_NULL
)
我想使用HyperlinkedIdentityField为Item中的序列化程序创建一个指向Documents详细信息页面的超链接。 所以我定义了URL:
url(r'^doc/(?P<version>[v1|v2]+)/(?P<pk>[0-9]+)/$',
doc_details,
name = 'api_document_details'
),
我制作了以下序列化器:
class ItemSerializer(serializers.ModelSerializer):
doc = serializers.HyperlinkedIdentityField(
view_name = 'api_document_details',
lookup_field = 'doc_id',
lookup_url_kwarg = 'pk'
)
class Meta:
model = Item
fields = ('name', 'doc')
这里的问题是Item中的doc字段是可选的。我得到了error
,因为如果doc_id = None,则找不到URL。
无法使用视图名称解析超链接关系的URL&#34; api_document_details&#34;。您可能未能在API中包含相关模型,或者在此字段上错误地配置了
lookup_field
属性。
如果文档未在记录中定义,我希望HyperlinkedIdentityField
返回None(null)。有人知道怎么做吗?
我尝试使用SerializerMethodField()
方法,我使用reverse函数,如果出现异常则返回None,但这有两个缺点:
v1
url
,域名是否包含在返回值中。