プログラミング初心者です。うまく質問できないですが、よろしくお願いします。
まず、駅テーブルと改札口テーブルがあり多対多のリレーション定義をしています。
やりたいことはリクエストパラメーターで駅のIDを取得してその駅IDに対応した改札口テーブルの情報をjsonで返すAPIを作りたいです。
djangorestframeworkのmodelviewsetを使って実現しようとしているのですがTypeError: get_queryset() missing 1 required positional argument: 'request'というエラーが出てうまくいきません。
おそらくここの文法的なことが間違っているのだとおもうのですが、なにが悪いのかわかりません。
def get_queryset(self,request):
queryset = station_ticket_gate.objects.filter(id=self.request.get('id'))
return queryset
あとmodelviewsetでは駅テーブルと改札口テーブルの中間テーブルを使用してますが、そもそも中間テーブルを使うのではなく参照、逆参照を使えばいいのでしょうか?
ticket_gate_api.py
from ..models import station_ticket_gate from ..serializers import station_ticket_gateSerializer from django.shortcuts import render from rest_framework import viewsets from rest_framework.response import Response class station_ticket_gateViewSet(viewsets.ModelViewSet): queryset = station_ticket_gate.objects.all() serializer_class = station_ticket_gateSerializer def get_queryset(self,request): queryset = station_ticket_gate.objects.filter(id=self.request.get('id')) return queryset
models.py
from django.db import models # Create your models here. class ticket_gate(models.Model): class Meta: db_table = 'ticket_gate' id = models.IntegerField(primary_key=True) name = models.CharField(max_length=255) longitude = models.DecimalField(max_digits=8, decimal_places=6) latitude = models.DecimalField(max_digits=9, decimal_places=6) def __str__(self): return self.name class station(models.Model): class Meta: db_table = 'station' id = models.IntegerField(primary_key=True) name = models.CharField(max_length=255) ticket_gate = models.ManyToManyField(ticket_gate, verbose_name='改札口', blank=True, through="station_ticket_gate") def __str__(self): return self.name class station_ticket_gate(models.Model): class Meta: db_table = 'station_ticket_gate' id = models.IntegerField(primary_key=True) station_id = models.ForeignKey(station, on_delete=models.CASCADE) ticket_gate_id = models.ForeignKey(ticket_gate, on_delete=models.CASCADE)
あなたの回答
tips
プレビュー