Как получить доступ к объекту связанной модели в компоненте vuejs с помощью django rest framework - PullRequest
0 голосов
/ 05 мая 2020

Я создаю полнофункциональное веб-приложение, используя Django, Django Rest framework и Vue. js в качестве внешнего интерфейса. Я работаю с моделью Post, у которой есть столбец автора, который связан с моделью Django User по внешнему ключу, например:

class Post(models.Model):
    title = models.CharField(max_length=50, unique=True)
    body = models.TextField()
    author = models.ForeignKey(User, on_delete=models.CASCADE)

Я настроил сериализаторы, наборы просмотра и URL-адреса вот так; serializers.py

class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = ['username', 'email']


class PostSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Post
        fields = ['url', 'title', 'body', 'author']

В моем vews.py;

class UserViewSets(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer


class PostViewSets(viewsets.ModelViewSet):
    queryset = Post.objects.all()
    serializer_class = PostSerializer

В моем urls.py;

router = routers.DefaultRouter()
router.register('users', UserViewSets)
router.register('posts', PostViewSets)

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include(router.urls)),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

Я могу получить доступ к моей модели Post на оставьте консоль фреймворка в моем браузере. Теперь в моем компоненте Vuejs я также могу получить список своих сообщений, если я сделаю запрос к конечной точке post api, т.е. http://localhost:8000/posts. Однако я также хочу получить связанную модель, то есть пользователя (автора отдельного сообщения), в качестве объекта, чтобы я мог сделать что-то вроде post.author.username или post.author.email в моем компоненте Vuejs, но я получаю URL пользователя http://127.0.0.1:8000/users/1/. Как я могу этого добиться?

...