gpt4 book ai didi

python - Django 休息框架 : Could not resolve URL for hyperlinked relationship using view name "post-detail"

转载 作者:太空宇宙 更新时间:2023-11-04 02:35:38 31 4
gpt4 key购买 nike

我找到了很多类似问题的答案,但没有一个对我有帮助。我是后端和 Django 的新手,我已经花了几天时间试图找出我做错了什么,但没有成功。我将不胜感激任何帮助!所以,当我调用 http://127.0.0.1:8000/users/ {用户名}/我得到:

ImproperlyConfigured: Could not resolve URL for hyperlinked relationship using view name "post-detail". You may have failed to include the related model in your API, or incorrectly configured the lookup_field attribute on this field.

如果我在任何其他字段上更改 HyperlinkedRelatedField 它工作正常...

urls.py

 app_name = 'api'
urlpatterns = [
url(r'^posts/(?P<post_id>\d+)/$', PostDetails.as_view(),
name='post-detail'),
url(r'^users/(?P<username>[\w\-]+)/$', UserPosts.as_view()),
]

views.py

class PostDetails(APIView):
"""
- GET a post

"""

def get(self, request, post_id):

post = Post.objects.get(id=post_id)
post_serializer = PostSerializer(post)

return Response(post_serializer.data)

class UserPosts(APIView):
"""
GET all user posts
"""

def get(self, request, username):
user = User.objects.get(username=username)
serializer = UserSerializer(user, context={'request': request})
return Response(serializer.data)

序列化器.py

  class UserSerializer(serializers.ModelSerializer):
posts = serializers.HyperlinkedRelatedField(many=True,
read_only=True,
view_name='post-detail',
lookup_field='id')
# Mandatory for UUID serialization
user_id = serializers.UUIDField()

class Meta:
model = User
exclude = ('id', 'password')
read_only_fields = ('created', 'username', 'posts',)


class PostSerializer(serializers.ModelSerializer):

author = UserSerializer()

class Meta:
model = Post
fields = '__all__'

模型.py

     class User(models.Model):
username = models.CharField(max_length=30, unique=True)
password = models.CharField(max_length=50)
email = models.EmailField(unique=True)
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
phone = models.CharField(max_length=20, blank=False, unique=True)
user_id = models.UUIDField(editable=False,
unique=True,
null=False,
db_index=True,)
created = models.DateTimeField()
id = models.BigAutoField(primary_key=True)

class Meta:
ordering = ('created',)

def __unicode__(self):
return "Email: %s " % self.email


class Post(models.Model):
created = models.DateTimeField()
is_active = models.BooleanField(default=False)
title = models.CharField(max_length=200, blank=False)
body_text = models.CharField(max_length=1000, blank=False)
address = models.CharField(max_length=100)
author = models.ForeignKey(User, on_delete=models.PROTECT,
related_name='posts')
price = models.DecimalField(max_digits=10, decimal_places=0)
id = models.BigAutoField(primary_key=True)

class Meta:
ordering = ('created',)

def __unicode__(self):
return "Title : %s , Author: %s " % (self.title, self.author)

最佳答案

您的 lookup_field 与您的 url 不匹配,即 post_id

url(r'^posts/(?P<post_id>\d+)/$', PostDetails.as_view(),
name='post-detail'),

来自文档:

  • lookup_field - 目标上应该用于查找的字段。应对应于引用 View 上的 URL 关键字参数。默认为“pk”。
  • lookup_url_kwarg - 与查找字段对应的 URL conf 中定义的关键字参数的名称。默认使用与 lookup_field 相同的值。

所以你应该没问题:

posts = serializers.HyperlinkedRelatedField(many=True,
read_only=True,
view_name='post-detail',
lookup_url_kwarg='post_id')

关于python - Django 休息框架 : Could not resolve URL for hyperlinked relationship using view name "post-detail",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47986522/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com