Использование переменных в классе в django
Я пытаюсь сделать график, который отображает данные о температуре и временной метке, однако я хочу отфильтровать их. Текущая база данных, из которой берутся эти данные, выглядит следующим образом:
И я хочу, чтобы график отображал данные только конкретного пользователя, который уже вошел в систему. Более того, у меня есть страницы для каждого ID комнаты, показывающие данные из этой комнаты и с этим пользователем, и именно там я хочу, чтобы отображался график. Таким образом, вы входите в систему и переходите на страницу конкретной комнаты, и график показывает температуру и временную метку данных из этой комнаты (и, конечно, с этим именем пользователя). Текущая структура отображает график, загружая данные в формате JSON в ссылку под названием API, и код для получения этих данных API показан здесь.
class ChartData(APIView, models.Model):
authentication_classes = []
permission_classes = []
def get(self, request, *args, **kwargs):
labels = []
for e in Post.objects.all():
labels.append(e.timestamp)
# print(e.room_id)
# print(e.username)
#print(e.temperature)
chartLabel = "my data"
chartdata = []
for e in Post.objects.all():
chartdata.append(e.temperature)
data ={
"labels":labels,
"chartLabel":chartLabel,
"chartdata":chartdata,
}
return Response(data)
Итак, сейчас он берет каждую температуру и временную метку в базе данных и помещает это на график. Чтобы изменить это так, чтобы он брал только те данные, где имя пользователя совпадает с именем пользователя, вошедшего в систему, и ID комнаты правильный, я предполагаю, что мне нужно добавить что-то в классы аутентификации или разрешения. Или если бы я мог передать аргумент request.user.get_username() в этот класс (который работает в моих других представлениях), я мог бы фильтровать набор объектов через это. более того, в предыдущем представлении у меня есть это:
def roomview(request, room_id):
logged_in_username = request.user.get_username()
Posts = Post.objects.filter(username=logged_in_username).filter(room_id=room_id)
context = {
'Posts' : Posts
}
return render(request, 'dashboard/roomview.html', context)
Этот код показывает объекты с тем же именем пользователя и тем же идентификатором комнаты, который выбирается, и отображает их на этой странице. Мне нужно найти способ передать этот room_id в класс chartData, чтобы он загружал только JSON файл требуемых данных, основанных на id комнаты и пользователе, который вошел в систему, но у меня не получается, любая помощь будет очень признательна.
Поэтому для получения имени пользователя мне пришлось реализовать следующую аутентификацию, в settings.py я добавил следующее:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
]
}
Затем в файле views.py я добавил следующее:
from rest_framework.authentication import SessionAuthentication, BasicAuthentication
from rest_framework.permissions import IsAuthenticated
class ChartData(APIView):
authentication_classes = [SessionAuthentication, BasicAuthentication]
permission_classes = [IsAuthenticated]
def get(self, request, *args, **kwargs):
UserIn = (request.user.username)
Для идентификации номера мне нужно было сделать только следующее:
class ChartData(APIView):
def get(self, request, *args, **kwargs):
for key, value in kwargs.items():
inroom = (value)