У меня есть три модели:
class Entity(models.Model):
entity = models.CharField(primary_key=True, max_length=25)
class Report(models.Model):
report = models.CharField(max_length=50)
report_link = models.CharField(max_length=300)
class Item(models.Model):
entities = models.ManyToManyField(Entity, related_name='entities')
report = models.ForeginKey(Report)
Представление построено на модели Item
:
def item_list(request):
items = Item.objects.select_related('report').prefetch_related('entities')
return render(request, 'items/item_list.html', {'items':items})
Это представление направляется в шаблон:
{% for item in items %}
<tr>
<td>
{% for entity in item.entities.all %}
{{ entity }}{% if not forloop.last %}, {% endif %}
{% endfor %}
</td>
<td>{{ item.report }}</td>
<td>{{ item.report.report_link|urlize }}</td>
</tr>
{% endfor %}
Эта строка (<td>{{ item.report.report_link|urlize }}</td>
) проявляется в браузере следующим образом:
https://server.domain/reports/specificReport?entity=
Как бы передать entities
в URL-адрес для фильтрации отчета?Желаемый результат будет выглядеть следующим образом:
https://server.domain/reports/specificReport?entity=12345
... или если есть несколько entities
для одного item
:
https://server.domain/reports/specificReport?entity=12345,56789
Каждый отчет в Report
Модель имеет ссылку, но ссылка не обязательно принимает параметр объекта, поэтому было бы не идеальным глобально изменять все ссылки (например, через jQuery или какой-либо другой JS).Тем не менее, на этой странице работает JS, так что возможно использовать это ... хотя я думаю, что вариант Django может быть лучшим.
Одна вещь, о которой я подумал, - это добавить в модель Report
индикатор, который помечает, нужно ли добавить entities
к ссылке ... но это не решает основную проблему прикреплениясмоделируйте поле до конца другого и «урлируйте» их обоих вместе.