Django, как перебрать наборы запросов двух подклассов в шаблоне? - PullRequest
0 голосов
/ 25 апреля 2019

Я использую django-model-utils для наследников. Я хочу получить результат обоих подклассов с одним словарем без дубликатов.

models.py

class Images(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='images_created', on_delete=models.CASCADE)
    created = models.DateTimeField(auto_now_add=True, null=True, blank=True)
    objects = InheritanceManager()

class Postimg(Images):
    user_img= models.ImageField(upload_to='images/%Y/%m/%d', null=True, blank=True)


class Postsms(Images):
    user_message = models.CharField(max_length=500,blank=True)

views.py

def home(request):
    all_post = Images.objects.all().order_by('-created').select_subclasses()
    return render(request, 'copybook/home.html',{ 'all_post':all_post})

тетрадный / home.html

{% for foo in all_post %}
    <hr>
    <br> SMS by:  <p>{{ foo.user}}  __  {{ foo.created }}</p>
    <h2>{{ foo.user_message }}</h2>
    <hr>
    <br> IMAGE by:  <p>{{ foo.user}}  __  {{ foo.created }}</p> 
    <img src="{{ foo.user_img.url }}"width="250">
{% endfor %}

Я ожидаю результата, когда я загружаю изображение или сообщение, которое должно занимать верхнюю часть на главной странице, но теперь, когда я загружаю изображение, пустое сообщение также перебирается.

Я думаю, что проблема в моем home.html, потому что я не знаю, как перебирать более двух подклассов с одним циклом for без получения дубликатов.

1 Ответ

0 голосов
/ 25 апреля 2019

В вашем шаблоне вы обрабатываете каждый элемент, как если бы это было и сообщение, и изображение.Вот почему вы получаете пустые разделы изображений для сообщений и пустые разделы сообщений для изображений.

Самый простой обходной путь - проверить, оценивается ли user_img или user_message как True:

{% for foo in all_post %}
    <hr>
    {% if foo.user_message %}
        <br> SMS by:  <p>{{ foo.user}}  __  {{ foo.created }}</p>
        <h2>{{ foo.user_message }}</h2>
    {% else %}
        <br> IMAGE by:  <p>{{ foo.user}}  __  {{ foo.created }}</p> 
        <img src="{{ foo.user_img.url }}"width="250">
    {% endif %}
{% endfor %}

Вместо else вы можете сделать отдельный if foo.user_img, чтобы объекты сообщений с пустыми сообщениями не интерпретировались как изображения.

...