Возврат модели внешнего ключа из другой модели (не экземпляра модели) - PullRequest
1 голос
/ 06 марта 2020

У меня есть такая модель:

class B(models.Model):
    value = models.CharField(etc...)

class A(models.Model):
    name = models.Charfield(
    fk = models.ForeignKey(B, etc...)

У меня нет экземпляра A в моей базе данных, но у меня есть несколько экземпляров B. Что я хочу сделать, это получить все экземпляры B через A модель (не экземпляр, так как у меня ее нет) в шаблоне Django. Я думал, так как модель - это объект, может быть, мы можем передать его, как мы передаем любой другой объект и каким-то образом использовать его атрибуты.

Пример

In views.py :

def my_view(request):
    B.objects.create(value=1)
    B.objects.create(value=2)
    B.objects.create(value=3)
    return render(request, 'template.html', {'model_a': A}

В шаблоне . html:

...
{% for b in a.fk_set.all %}
    {{ b }}
{% endfor %}
...

отображается как

1
2
3

Я понимаю, что это неправильно, потому что нет экземпляра A, и db не знает, что B каким-либо образом связан с A.

Вопрос: Есть ли способ получить подобный эффект как я упоминал в примере?

1 Ответ

0 голосов
/ 06 марта 2020

Я нашел способ, который работает в представлениях, но он не работает в шаблоне.

Вам нужна эта строка:

foo = A.fk.field.related_model.objects.all()

Это дает вам набор запросов, содержащий все B записи:

<QuerySet [<B: B object (1)>, <B: B object (2)>, <B: B object (3)>, <B: B object (4)>, <B: B object (5)>]>

Но это ничего не показывает в шаблоне:

{% for b in model_a.fk.field.related_model.objects.all %}
    {{ b }}
{% endfor %}

Вы можете передать набор запросов foo в шаблон и выполнить итерации по нему. хотя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...