Я не могу заставить работать user-id / pk в моем APIView - PullRequest
0 голосов
/ 15 февраля 2019

Мне нужно отфильтровать данные по пользователю.У меня есть иностранный ключ в моей модели.Но я не могу получить id / pk от пользователя, к сожалению. Если я ввожу pk вручную, как author = 1, он работает довольно хорошо.Я просто не могу получить ПК автоматически.

У меня есть пользователи.Как и я, пользователь один.Я добавляю персонажей с определенными атрибутами в базу данных (name, gebiet, typ, stärke).

Теперь я хочу показать, что символы Stärke в диаграмме с помощью gebiet и typ.

Работает нормально.

Но я также хочу, чтобы вошедший в систему пользователь видел только те символы, которые он добавил в базу данных.Таким образом, если пользователь добавляет «Hulk» с stärke = 70.000 как gebiet = global, а пользователь 2 добавляет «Hulk» с stärke = «100.000».Каждый пользователь должен видеть только свой собственный Халк.Поэтому мне нужно отфильтровать по user.id.

Надеюсь, теперь стало понятнее: -)

просмотров

class ChartData(APIView):
    authentication_classes = []
    permission_classes = []

    def get(self, request, format=None):
        user = get_object_or_404(User, pk=self.kwargs.get('pk'))
        kosmisch = Char.objects.filter(gebiet='Kosmisch', author=user)[:5].aggregate(Sum('stärke'))['stärke__sum']
        geschick = Char.objects.filter(typ='Geschick', author=user)[:5].aggregate(Sum('stärke'))['stärke__sum']
        stadt = Char.objects.filter(gebiet='Stadt', author=user)[:5].aggregate(Sum('stärke'))['stärke__sum']

        labels = ['Kosmisch', 'Geschick', 'Stadt']
        default_items = [kosmisch, geschick, stadt]
        data = {
            "labels": labels,
            "default": default_items,
        }
        return Response(data)

urls

from django.urls import path
from .views import (
    ChartsViews,
    ChartData,
   )
from . import views

urlpatterns = [
    path('charts/<int:pk>', ChartsViews.as_view(), name='chart-view'),
    path('api/charts/data/<int:pk>', ChartData.as_view(), name='chart-data'),
]

модели

class Char(models.Model):
    name = models.CharField(max_length=100)
    gebiet = models.CharField(max_length=100)
    typ = models.CharField(max_length=100)
    stärke = models.IntegerField(max_length=100)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    image = models.FileField(max_length=1000, blank=True, null=True,     default="default.jpg")

    def __str__(self):
        return self.name

1 Ответ

0 голосов
/ 15 февраля 2019

Я получил это работает, спасибо.Я добавил pk в URL и запросил pk в представлениях:

class ChartData(APIView):
    authentication_classes = []
    permission_classes = []

    def get(self, request, pk, format=None):
        user = get_object_or_404(User, pk=self.kwargs.get('pk'))
        kosmisch = Char.objects.filter(gebiet='Kosmisch', author=user)[:5].aggregate(Sum('stärke'))['stärke__sum']
...