我无法在我的APIView中使用user-id / pk

时间:2019-02-15 12:28:53

标签: django userid

我需要按用户过滤数据。我的模型中有一个ForeignKey。但是我无法从用户那里得到id / pk。如果我像author = 1一样手动输入一个pk,效果很好。我只是无法自动获取pk。

我有用户。像我一样,用户一我将具有某些属性的Charakters添加到数据库中(名称,gebiet,typ,stärke)。

现在我想通过gebiet和typ在图表中显示CharactersStärke。

那很好。

但是我也希望登录的用户只能看到他添加到数据库中的字符。因此,如果用户1添加stärke= 70.000的“绿巨人”作为gebiet =全局,而用户2添加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)

网址

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 :(得分:0)

我知道了,谢谢。我加了     pk 到URL并要求 观看次数:

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']