【发布时间】:2018-08-27 12:26:36
【问题描述】:
Django REST 框架的新手,似乎我缺少一些基础知识。 在这里和网络上来回阅读了数百个问题,但找不到问题所在。
目标是建立良好的链接和易于探索的 REST api(可点击),就像 https://github.com/encode/rest-framework-tutorial 中展示的示例一样。
任何提示都非常受欢迎,因为我很费劲,找不到可行的解决方案。
class GroupManager(models.Manager):
use_in_migrations = True
def get_by_natural_key(self, name):
return self.get(name=name)
class Group(models.Model):
name = models.CharField(_('name'), max_length=80, unique=True)
permissions = models.ManyToManyField(
Permission,
verbose_name=_('permissions'),
blank=True,
)
objects = GroupManager()
class Meta:
verbose_name = _('group')
verbose_name_plural = _('groups')
def __str__(self):
return self.name
def natural_key(self):
return (self.name,)
class GroupSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Group
fields = ('url', 'name')
class GroupViewSet(viewsets.ModelViewSet):
queryset = Group.objects.all()
serializer_class = GroupSerializer
以上结果是非常好的链接 REST api,带有自动生成的 URL,可点击并获取实例详细信息:
试图用我定义如下的非常简单的模型来复制它失败了:
class Author(models.Model):
name = models.CharField("Authorist", max_length=20)
def get_by_natural_key(self,name):
return self.get(name=name)
def __str__(self):
return self.name
def natural_key(self):
return (self.name,)
class Book(models.Model):
title = models.CharField("Tytuł",max_length=100)
autorek = models.ForeignKey(Author,related_name='knicha',on_delete=models.CASCADE)
class AuthorSerializer(serializers.ModelSerializer):
# id = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='author-detail')
class Meta:
model = Author
# fields = ('__all__')
fields = ('url','name')
# depth = 2
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = ('__all__')
depth = 2
class AuthorVS(viewsets.ModelViewSet):
queryset = Author.objects.all()
serializer_class = AuthorSerializer
class BookVS(viewsets.ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer
router.register('author',AuthorVS)
router.register('book',BookVS)
产生的错误是:
无法使用视图名称解析超链接关系的 URL “作者详细信息”。您可能未能将相关模型包含在 您的 API,或者错误地配置了
lookup_field属性 这个字段。
如果有人能解释我的示例模型需要做什么以及为什么需要做,那将是授权。我确实通读了 HyperLinkedModels 等,但无法正常工作。我很确定我错过了一些愚蠢的东西来让它工作。
【问题讨论】:
-
你的 Django 和 DRF 版本是什么?哪个操作导致错误?
-
我无法使用 Django 2.0 和 DRF 3.7 重现该错误。我可以得到链接
{ "author": "http://localhost:8000/test/author/", "book": "http://localhost:8000/test/book/" }。所有这些都有效:[ { "url": "http://localhost:8000/test/author/1/", "name": "abcd" } ]和[ { "id": 1, "title": "efg", "autorek": { "id": 1, "name": "abcd" } } ] -
我在 Django 2.0.1 和 DRF 3.7.7 我将发布示例代码,这会导致失败,以便任何人轻松导入/测试。我确定我犯了一些愚蠢的错误:(
-
愚蠢的错误:我也是:)。我们都在学习。您能否描述一下错误前的操作?同时复制所有错误堆栈并放入您的问题中。
-
我在
# id = serializers...行中找到了author-detail。你为什么把它评论出来?当我取消注释时,我收到的错误与您的不同。您能否用有错误的版本更新您的问题?
标签: django django-rest-framework