Параметры запроса в url в проекте Django
Я хотел бы иметь параметры запроса в url моего запроса, которые позволяют получить данные в соответствии с идентификатором растения + название этапа (посев, посадка или сбор урожая.
Example : http://localhost:8000/api/plant/life/calendars?plant_id=1&step_title=sowing
Позвольте мне объяснить: в моей текущей модели plant_life_calendars
у меня есть plant_step_id
, который присоединяется к таблице plant_step
и в этой таблице у меня есть в качестве modele plant_id
, который является foreingkey таблицы plant
и step_title
для названия этапа, как следует из названия.
Надеюсь, это достаточно понятно, это трудно объяснить письменно, но я поместил ниже скрины различных моделей, чтобы лучше понять.
Я хочу, чтобы запрос plant_life_calendars
вводил в url запросы plant_id
и step_title
, которые поступают из таблицы plant_step
, поэтому в представлении я сделал так:
class PlantLifeCalendarLinkAPIView(ListAPIView):
permission_classes = (AllowAnonymous,)
serializer_class = ReadPlantLifeCalendarSerializer
def get_queryset(self):
try:
plant_id = int(self.request.GET.get('plant_id'))
except (ValueError, TypeError):
plant_id = None
step_title = self.request.GET.get('step_title')
params = {}
if plant_id:
params['plant__id'] = plant_id
if step_title :
params['step_title '] = step_title
if params:
return PlantLifeCalendar.objects.filter(**params)
return PlantLifeCalendar.objects.all()
Но он не работает, он дает мне это сообщение об ошибке:
<pre class="exception_value">Cannot resolve keyword 'plant' into field. Choices are: end, id, plant_step_id, plantlife, start</pre>
<table class="meta">
<tr>
<th>Request Method:</th>
<td>GET</td>
</tr>
<tr>
<th>Request URL:</th>
<td>http://localhost:8000/api/plant/life/calendars?step_title=Sowing&plant_id=1</td>
</tr>
Вот моя модель PlantLifeCalendar :
from django.db import models
from multiselectfield import MultiSelectField
MONTHS = (
(1, 'January'),
(2, 'February'),
(3, 'March'),
(4, 'April'),
(5, 'May'),
(6, 'June'),
(7, 'July'),
(8, 'August'),
(9, 'September'),
(10, 'October'),
(11, 'November'),
(12, 'December')
)
class PlantLifeCalendar(models.Model):
plant_step_id = models.ManyToManyField('perma_plant_steps.PlantStep')
start = MultiSelectField(choices=MONTHS, max_choices=3, max_length=6)
end = MultiSelectField(choices=MONTHS, max_choices=3, max_length=6)
Вот моя модель PlantStep :
from django.db import models
class PlantStep(models.Model):
plant_id = models.ForeignKey('perma_plants.Plant', on_delete=models.CASCADE)
step_title = models.CharField(max_length=50)
step_order = models.IntegerField()
step_subtitle = models.CharField(max_length=250)
help = models.TextField(blank=True, null=True)