Присоединение к моделям и переход к шаблону - PullRequest
0 голосов
/ 09 июля 2020

У меня есть несколько связанных models, и на одной странице мне нужно получить доступ к данным из разных models при различных условиях. Доступ к большей части этих данных осуществляется без form, поскольку пользователю необходимо управлять только несколькими полями.

Чтобы дать вам представление о том, насколько взаимосвязаны мои модели:

class User(models.Model):
    first = models.ManyToManyField(First)
    second= models.ManyToManyField(Second)

class First(models.Model):
    [...]

class Second(models.Model):
    first = models.ManyToManyField(First)

class Third(models.Model):
    first = models.ForeignKey(First)

class Fourth(models.Model):
    user = models.ForeignKey(User)
    second = models.ForeignKey(Second)
    third = models.ForeignKey(Third)

class Fifth(models.Model):
    fourth = models.ForeignKey(Fourth)

class Sixth(models.Model):
    fifth = models.ForeignKey(Fifth)

У меня большие трудности с передачей этих данных на мой template и их эффективным отображением. Изначально я показывал это пользователю ужасным образом, так как просто хотел проверить, доступны ли мои данные / отображаются ли они правильно. Это пример хитроумного кода, который я использовал для проверки правильности передачи моих данных:

{% for second in user.second.all %}
{% for first in second.first.all %}
[...]
{% for fourth in user.fourth.all %}
[...]
{% if fourth.first_id == first.id  and fourth.second_id == second.id %}
{% if fourth.checked == True %}
[...]
{% else %}
[...]
{% endif %}
{% endif %}
{% endfor %}
{% endfor %}
{% endfor %}
[...]

Разве это не мерзость, и он идет глубже. Сейчас пытаюсь это переформатировать. Я знаю, что моя обработка должна выполняться в рамках моего представления, а не моего шаблона. Дело в том, что я не могу просто отфильтровать много данных в моем views, так как мне нужно много данных в template в разное время (например, у меня может быть 20 фрагментов данных в model и Мне нужно получить доступ ко всем 20, но некоторые, когда совпадают id, некоторые, когда id и type совпадают et c. Это много сторонних logi шаблона c - я думаю, что это плохо).

Это то, что я пытался сделать до сих пор, но мне не повезло:

second = Second.objects.filter(user__id=user.id) .select_related('First')

Любая помощь в том, как присоединить / передать все эти model на мой view и получить доступ к данным без вложенных вложенных циклов, или даже просто указатели на то, как подойти к этому, будут оценены. Я также не уверен, стоит ли мне стремиться присоединиться к как можно большему количеству model s, а затем перейти к моему view или передать несколько отдельных models.

Спасибо.

1 Ответ

0 голосов
/ 09 июля 2020

вы сериализатор, данные используют сериализатор DRF вам нужно будет использовать вложенный сериализатор

пример для вложенного сериализатора

    class HospitalsSerializer(serializers.ModelSerializer):
        class Meta:
            model = Hospitals
            fields = '__all__'
    
    class HealthProductSerializers(serializers.ModelSerializer):
        hospital_list = HospitalsSerializer(many=True)
    
        class Meta:
            model = HealthProduct
            exclude = ("created_at", "updated_at")
...