@Bulbashful

Как вывести из модели связи с Foreign Key?

Есть модель
lass Cruski(models.Model):
    name = models.CharField(max_length=40)
    description = models.TextField(default='Описание кружка')
    price = models.IntegerField(default=0)
    def __str__(self):
        return self.name

class Vospitately(models.Model):
    fio = models.CharField(max_length=40)
    dolshnost = models.CharField(max_length=80, default='Должность..')
    image = models.ImageField()
    vospet_crushek = models.ForeignKey(Cruski)
    def __str__(self):
        return self.fio


views.py
def kruzhki(request):
    q = Cruski.objects.all()
    p = Vospitately.objects.filter(vospet_crushek_id=?)
    return render(request,'krushki.html',{'kruzki':q, 'vospitately':p})


шаблон
{% block kruzhki %}
{% for krug in kruzki %}
<p><b>{{ krug.name }}</b></p>
{% for vospet in vospitately %}
<p> {{ vospet.fio }}</p>
{% endfor %}
<p>{{ krug.description }}</p>
<p>{{ krug.price }}</p>
{% endfor %}

Как мне связать в представлении модели, чтобы выводилось инфа с одной и другой модели по id?
  • Вопрос задан
  • 953 просмотра
Решения вопроса 1
winordie
@winordie
Лучшая документация -- исходники
Snachala nado opredelit related_name dlya Vospitately.vospet_crushek
class Vospitately(models.Model):
    fio = models.CharField(max_length=40)
    dolshnost = models.CharField(max_length=80, default='Должность..')
    image = models.ImageField()
    vospet_crushek = models.ForeignKey(Cruski', related_name='vospitately')
    def __str__(self):
        return self.fio

Potom vo view mogno tak sdelat
def kruzhki(request):
    q = Cruski.objects.all()
    return render(request,'krushki.html',{'kruzki':q})

I nakonec v shablone pishem chto to po tipu takogo
{% block kruzhki %}
{% for krug in kruzki %}
<p><b>{{ krug.name }}</b></p>
{% for vospet in krug.vospitately.all %}
<p> {{ vospet.fio }}</p>
{% endfor %}
<p>{{ krug.description }}</p>
<p>{{ krug.price }}</p>
{% endfor %}

Vot i vse. Takim obrazom u nas vivoditsya krugki i vospitately kotorie v nis sostoyat.

Kstati vam bi opredelitsya stoit kak pisat "кружки":
- Cruski
- vospet_crushek
- kruzhki
- kruzki
- krushki.html
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
scream4ik
@scream4ik
models.py
class Cruski(models.Model):
    name = models.CharField(max_length=40)
    description = models.TextField(default='Описание кружка')
    price = models.IntegerField(default=0)
    def __str__(self):
        return self.name

class Vospitately(models.Model):
    fio = models.CharField(max_length=40)
    dolshnost = models.CharField(max_length=80, default='Должность..')
    image = models.ImageField()
    vospet_crushek = models.ForeignKey(Cruski, related_name='vospitately')
    def __str__(self):
        return self.fio


views.py
def kruzhki(request):
    q = Cruski.objects.all()
    return render(request,'krushki.html',{'kruzki':q})


template
{% block kruzhki %}
{% for krug in kruzki %}
    <p><b>{{ krug.name }}</b></p>
    {% for vospet in krug.vospitately.all %}
        <p> {{ vospet.fio }}</p>
    {% endfor %}
    <p>{{ krug.description }}</p>
    <p>{{ krug.price }}</p>
{% endfor %}
Ответ написан
Комментировать
@Sushkov
">alert("yohoho")
Вам нужно при связи моделей использовать backref, тогда можно будет получить 2 объект через 1 и ничего не придется городить.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы