Невозможно получить доступ к элементам внешнего ключа в html-шаблонах DJANGO

Просмотров:

def search_devis(request):
devis = Devis.objects.all()
commercial = User.objects.all()
client = Client.objects.all()

context={
    'devis': devis,
    'commercial': commercial,
    'client_': client,

}
return render(request, "manage_devis/search_devis.html",context )

Модели:

class Devis(models.Model):
titre = models.CharField(max_length=30, )
date_ecriture = models.DateField(auto_now_add=True)
date_expiration = models.DateField()
client = models.ForeignKey(Client, name="CLIENT_FK", default=1 ,on_delete=models.SET_DEFAULT)
total = models.DecimalField(max_digits=10, decimal_places=2)
commercial = models.ForeignKey(User, name="COMMERCIALFK", default=1 ,on_delete=models.SET_DEFAULT)
def __str__(self):
    return "DV"+str(self.pk)

Шаблоны:

{% for devis_ in devis %}
    <tr>
        <th scope="row"><a href="{% url 'view_devis' devis_.pk %}">DV{{devis_.id }}</a></th>
    <td>{{ devis_.date_ecriture }}</td>
    <td>{{ devis_.date_expiration }}</td>
    <td>{{devis_.client.nom}}</td>
    <td>{{ devis_.total}} DH</td>
    <td>{{ devis_.commercial.last_name}}</td>
    </tr>
{% endfor %}

Я не могу отобразить атрибуты объекта внешнего ключа, в нем нет значений. В столбце ничего не отображается. Я использую базу данных postgresql.

Попробуйте {% for devis in object.devis_set.all %}. И не используйте _ в конце devis

Для начала попробуйте удалить name="CLIENT_FK" в модели, а затем выполнить миграцию (python manage.py makemigrations и python manage.py migrate). Теперь ваша модель должна выглядеть примерно так:

class Devis(models.Model):
titre = models.CharField(max_length=30, )
date_ecriture = models.DateField(auto_now_add=True)
date_expiration = models.DateField()
client = models.ForeignKey(Client, default=1 ,on_delete=models.SET_DEFAULT)
total = models.DecimalField(max_digits=10, decimal_places=2)
commercial = models.ForeignKey(User, default=1 ,on_delete=models.SET_DEFAULT)
def __str__(self):
    return "DV"+str(self.pk)

После этого вы можете выполнять итерации в вашем forloop, пожалуйста, избегайте использования чего-то вроде devis_. Я предлагаю вам использовать цикл forloop следующим образом:

{% for dev in devis %}
    <tr>
        <th scope="row"><a href="{% url 'view_devis' dev.pk %}">DV{{dev.id }}</a></th>
    <td>{{ dev.date_ecriture }}</td>
    <td>{{ dev.date_expiration }}</td>
    <td>{{dev.client.nom}}</td>
    <td>{{ dev.total}} DH</td>
    <td>{{ dev.commercial.last_name}}</td>
    </tr>
{% endfor %}
Вернуться на верх