同様の問題に対する多くの回答が見つかりましたが、 私はバックエンドとDjangoを初めて使っています。私は数日間、私が間違っていることを理解しようとしましたが、成功しませんでした。 私はどんな助けもありがとう! だから、私が呼ぶときhttp://127.0.0.1:8000/users/ {USER_NAME}/ 私は取得しています:Django Rest Framework:ビュー名 "post-detail"を使用してハイパーリンクされたリレーションシップのURLを解決できませんでした。
ImproperlyConfigured:ビュー名 "ポスト・ディテール" を使用して、ハイパーリンクの関係のためのURLを解決できませんでした。 APIに関連するモデルを含めることができなかったか、このフィールドに
lookup_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)
serializer.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__'
models.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)
おかげで、それが働いています! –