Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 是否在模型上使用具有非id主键的HyperlinkedEntityField?_Django_Django Rest Framework - Fatal编程技术网

Django 是否在模型上使用具有非id主键的HyperlinkedEntityField?

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

我有一个相对简单的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(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
。只要他们都没有,我就没有例外。不多,但可能值得一试。这是这个答案和在查找字段上使用正则表达式的结合,解决了这个问题。