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)
Вернуться на верх