Мне нужно отфильтровать данные по пользователю.У меня есть иностранный ключ в моей модели.Но я не могу получить 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