Django получить все элементы, фильтруя их по FK
Я хотел бы сделать API для получения всех ежедневников определенного трекера, чтобы затем получить их в react native, не могли бы вы мне помочь, как это сделать? Спасибо заранее. У меня также есть классы User и Habit, но в данном случае мне нужен только этот API.
class Tracker(models.Model):
habit = models.ForeignKey(Habit, on_delete=models.CASCADE)
user = models.ForeignKey(User, related_name='trackers', on_delete=models.CASCADE)
start_date = models.DateField(blank=False)
end_date = models.DateField(blank=False)
published = models.BooleanField(blank=False)
@property
def habit_title(self):
return self.habit.title
def is_active(self):
today = datetime.now().date()
return (today >= self.start_date) and (today <= self.end_date)
def no_of_days(self):
return abs((self.end_date-self.start_date).days) + 1
class Daily(models.Model):
STATUS = [('DONE', 'DONE'), ('TODO', 'TODO'), ('NOTDONE', 'NOTDONE'),]
date = models.DateField()
status = models.CharField(choices=STATUS, max_length=10, default='TODO')
tracker = models.ForeignKey(Tracker, on_delete=models.CASCADE)
class Meta:
unique_together = (('date', 'tracker'),)
index_together = (('date', 'tracker'),)
serizalizers.py
class TrackerSerializer(serializers.ModelSerializer):
habit_title = serializers.ReadOnlyField()
class Meta:
model = Tracker
fields = ['id', 'start_date', 'end_date', 'published', 'is_active', 'no_of_days', 'habit', 'habit_title', 'user']
def create(self, validated_data):
tracker = Tracker.objects.create(**validated_data)
diff = abs((validated_data['start_date'] - validated_data['end_date']).days)
for i in range(0, diff + 1):
Daily.objects.create(date=(validated_data['start_date'] + timedelta(days=i)), tracker=tracker)
return tracker
class DailySerializer(serializers.ModelSerializer):
class Meta:
model = Daily
fields = ['id', 'date', 'status', 'tracker']
views.py
class TrackerViewSet(viewsets.ModelViewSet):
serializer_class = TrackerSerializer
authentication_classes = [TokenAuthentication]
permission_classes = [IsAuthenticated]
def get_queryset(self):
return self.request.user.trackers.filter(user=self.request.user)
def perform_create(self, serializer):
serializer.save(user=self.request.user)
class DailyViewSet(viewsets.ModelViewSet):
serializer_class = DailySerializer
authentication_classes = [TokenAuthentication]
permission_classes = [IsAuthenticated]
def update(self, request, *args, **kwargs):
response = {'message': 'You cant update daily like that'}
return Response(response, status=status.HTTP_400_BAD_REQUEST)
def create(self, request, *args, **kwargs):
response = {'message': 'You cant create daily like that'}
return Response(response, status=status.HTTP_400_BAD_REQUEST)