ключевой объект foriegn не повторяется в шаблоне - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть базовые модели для раздела, подраздела и предложения.1 раздел может содержать несколько подразделов.Каждый подраздел может содержать несколько предложений.Модели выглядят так:

**models.py**

class Clause(models.Model):
    number = models.CharField(max_length=8, unique=True)
    requirements = models.TextField(max_length=2000, unique=False, blank=True, null=True)
    documentation = models.TextField(max_length=2000, unique=False, blank=True, null=True) 

class Subsection(models.Model):
    number = models.CharField(max_length=5, unique=True)
    name = models.CharField(max_length=150, unique=False)
    descriptor = models.TextField(max_length=2000, unique=False, blank=True, null=True)
    clause = models.ForeignKey(Clause, on_delete=models.DO_NOTHING, related_name="clause")

class Section(models.Model):
    number = models.CharField(max_length=2, unique=True)
    name = models.CharField(max_length=150, unique=False)
    descriptor = models.TextField(max_length=2000, unique=False, blank=True, null=True)
    subsection = models.ForeignKey(Subsection, on_delete=models.DO_NOTHING, related_name="subsection")

функция основного вида для вызова нужного раздела:

**views.py**

def main(request):
    form = MainSearchForm() 
    user = request.user
    sections = []

    show_results = True
    if 'query' in request.GET:
            show_results = True
            query = request.GET['query'].strip()
            if len(query) <= 2:
                sections = Section.objects.filter(number__iexact=query) 

    if    sections: 
            records = sections
            tpl = "display_console.html"
            context = {'user': user, 'records': records, 'form': form}
            return render(request, tpl, context)

    else:
            tpl = "main.html"
            context = {'user': user, 'form': form}
            return render(request, tpl, context)

к сожалению, я не могу получить свой шаблон для возврата данных моего подраздела.Следующее возвращает объект 'Subsection' не повторяемая ошибка:

**template**

<table class="section_tb">

            {% if records %}
       {% for record in records %}

    <tr>
        <td>{{ record.number }}</td><td>{{ record.name }}</td>
    </tr>

    {% for item in record.subsection %}

    <tr>
        <td>{{ item.number }}</td><td>{{ item.name }}</td>
    </tr>
    <tr>
        <td colspan=2>{{ item.descriptor }}</td>
    </tr>
             {% endfor %}
</table>

             {% endfor %}
             {% else %}
             {% endif %}

с заменой:

{% for item in record.subsection.all %}

для:

{% for item in record.subsection %}

удаляет сообщение об ошибке, ноне возвращает никаких данных.Есть что-то очевидное, что я делаю не так?

1 Ответ

1 голос
/ 25 апреля 2019

Это потому, что Раздел может иметь только один подраздел. Таким образом, вы можете получить доступ к подразделу просто с помощью {{record.subsection}}, поэтому здесь не требуется forloop.

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

Если вы хотите получить доступ ко многим внешним ключам с другой стороны, используйте model_name_in_lowercase_set или определите связанное имя в models.ForeignKey(..., related_name="something"), тогда вы можете позвонить something_set

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