Django отображает множество атрибутов после запроса, отображение None

Я использую slug для запроса модели и вывода результата в HTML. Код не может отобразить фактическое название региона, он просто возвращает None

Модель

class Region(models.Model):
    name = models.CharField(blank=False, unique=True) 
    def __str__(self):
        return self.name

class Theme(models.Model):
    name = models.CharField(blank=False, unique=True) 
    slug = models.SlugField(default="", null=False)
    def __str__(self):
        return self.name

class ETF(models.Model):
    ticker = models.CharField(max_length=6, blank=False, db_index=True, unique=True) 
    full_name = models.CharField(max_length=200, blank=False)
    # many to many
    region = models.ManyToManyField(Region)
    theme = models.ManyToManyField(Theme) 

views.py

def theme_etf(request, slug): # render ETFs with theme filter   
    filtered_results = ETF.objects.filter(theme__slug=slug) 
    return render(request, "etf/list_etf.html", {
        "ETFs": filtered_results   
    })

Часть list_etf.html

{% for ETF in ETFs %}            
  <tr>          
      <td>{{ ETF.ticker }}</td>
      <td>{{ ETF.full_name }}</td>
      <td>{{ ETF.region.name }}</td>  # What should I use in this line
  </tr>
{% endfor %}

Код не может отобразить фактическое название региона, он просто возвращает None Result

  • Тикер, Название, Регион
  • ARKF, ARK Fintech Innovation ETF, None
  • ARKK, ARK Innovation ETF, None
  • KEJI, Global X China Innovation, None

Я хотел бы иметь следующее:

  • Тиккер, Название, Регион
  • ARKF, ARK Fintech Innovation ETF, Global
  • ARKK, ARK Innovation ETF, Global
  • KEJI, Global X China Innovation, Китай

У меня есть информация в базе данных. Я проверил ее в админке.

Поскольку у вас есть отношения many-to-many, вы не можете просто иметь отдельные значения. Поэтому вы должны перечислить значения.

{% for ETF in ETFs %}            
  <tr>          
      <td>{{ ETF.ticker }}</td>
      <td>{{ ETF.full_name }}</td>
      <td>
          <ol>
              {% for region in ETF.region %}
                  <li>{{region.name}}</li>
              {% endfor %} 
          </ol>
      </td> 
  </tr>
{% endfor %}

Может ли ETF иметь несколько регионов, как подразумевается в вашем проекте базы данных? Если нет, я бы предложил вам использовать ForeignKey вместо этого.

Вы обращаетесь к полю region так, как если бы это было поле ForeignKey. В проекте базы данных вам необходимо выполнить итерации по объектам, сохраненным в ManyToManyField, используя .all.

{% for ETF in ETFs %}            
  <tr>          
      <td>{{ ETF.ticker }}</td>
      <td>{{ ETF.full_name }}</td>
      <td>{% for region in ETF.region.all %}{{ region.name }}{%endfor%}</td>
  </tr>
{% endfor %}
Вернуться на верх