Django 是否在模型上使用具有非id主键的HyperlinkedEntityField?
我有一个相对简单的Django 1.7模型,它表示一个服务器:Django 是否在模型上使用具有非id主键的HyperlinkedEntityField?,django,django-rest-framework,Django,Django Rest Framework,我有一个相对简单的Django 1.7模型,它表示一个服务器: class Server(models.Model): hostname = models.CharField(max_length=100, primary_key=True) puppetInfo = models.TextField(blank=True, null=True) 我打算通过Django REST框架公开此信息,并创建了以下序列化程序和视图集: class ServerSerializer(se
class Server(models.Model):
hostname = models.CharField(max_length=100, primary_key=True)
puppetInfo = models.TextField(blank=True, null=True)
我打算通过Django REST框架公开此信息,并创建了以下序列化程序和视图集:
class ServerSerializer(serializers.ModelSerializer):
id = serializers.HyperlinkedIdentityField(view_name="server-detail", read_only=True)
instances = serializers.HyperlinkedRelatedField(view_name='instance-detail', many=True, read_only=True)
class Meta:
model = models.Server
class ServerViewSet(viewsets.ReadOnlyModelViewSet):
queryset = models.Server.objects.all()
serializer_class = ServerSerializer
lookup_field = "server_hostname"
我尝试了许多排列方式来实现这一点,但无论我尝试了什么,当我访问服务时,总是会出现以下错误:
在/api/服务器上配置不正确/
无法使用视图名称“服务器详细信息”解析超链接关系的URL。您可能未能将相关模型包括在API中,或者在此字段上错误配置了lookup\u字段
属性
我还使用简单路由器配置URL的:
router = routers.SimpleRouter()
....
router.register(r'servers', server.ServerViewSet)
如果有任何帮助,我将不胜感激。在玩了一段时间之后,我想我可能有了一个想法。您的主机名是否包含自动生成的
DRF
url模式可能不支持的字符?我设法在查找字段中的一个值包含点时使一个示例失败,例如foobar.com
。只要他们都没有,我就没有例外。不多,但可能值得一试。这是这个答案和在查找字段上使用正则表达式的结合,解决了这个问题。