Вложенные сериализаторы Django для не связанных между собой имен - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть модели ниже в моем проекте

class TicketCounter(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    ticket_counter_name = models.CharField(max_length=100, default="")

class TicketCategory(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    ticket_category_name = models.CharField(max_length=100, default="")
    ticket_category_rate = models.CharField(max_length=100, default="")


class WorkerToTicketCounter(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    ticket_counter = models.ForeignKey(TicketCounter, related_name="workers")
    worker = models.ForeignKey(User, related_name='ticket_counter')
    worker_to_ticket_counter_is_deleted = models.BooleanField(default=False)


class TicketCounterToCategory(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    ticket_counter = models.ForeignKey(TicketCounter, related_name="categories")
    ticket_category = models.ForeignKey(TicketCategory)

Каждый TicketCounter будет иметь работника (пользователя) и TicketCategory с. Когда работник входит в приложение Android. Он должен получить свои данные, такие как email first_name и 'last_name'. Я сделал это с нижеуказанным сериализатором.

class MeSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = (
            'pk',
            'first_name',
            'last_name',
            'email',
    )

В моем приложении есть необходимость, где нужны не только детали, но и связанные с ним TicketCounter. Поэтому я добавил ticket_counter, как показано ниже

class MeSerializer(serializers.ModelSerializer):
    ticket_counter = serializers.SerializerMethodField(read_only=True)

    class Meta:
        model = User
        fields = (
            'pk',
            'first_name',
            'last_name',
            'email',
            'ticket_counter',
    )

    def get_ticket_counter(self, user):
        qs = user.ticket_counter.filter(worker_to_ticket_counter_is_deleted=False)
        if qs.exists() and hasattr(qs.first().ticket_counter, 'ticket_counter_name'):
            return qs.first().ticket_counter.ticket_counter_name
        return "--"

Но теперь мне нужно получить связанные категории этого ticket_counter в списке объектов в MeSerializer. Является ли это возможным?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...