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 %}