我需要按用户过滤数据。我的模型中有一个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
答案 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']