Я пытаюсь разработать сайт системы оценки, который позволяет пользователям отправлять целевые оценки (один раз) для заданных показателей. Больше в описании - PullRequest
0 голосов
/ 18 января 2020

Я очень новичок в этом, и это немного сложное приложение, поэтому, пожалуйста, потерпите меня.

Я создаю 2 страницы: 'submittargets' и 'entertargetdata'. На странице «submittargets» вам будет предложено выбрать учетную запись из списка, которая захватит идентификатор объекта учетной записи, передаст его URL-адресу и отобразит имя объекта в раскрывающемся списке на следующей странице. Я делаю это, поэтому я знаю, что соответствующий объект был передан.

На странице «entertargetdata» «вопросы» отображаются в поле для l oop, и вы будете вводить целевые оценки (от 1 до 100) для каждого вопроса, также в поле для l oop. Затем нажмите «отправить»: это отправит учетную запись, вопросы для учетной записи и оценки по этому вопросу в базу данных sqlite.

Я совершенно застрял.

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

Текущая ошибка: страница не найдена: AccountTarget не соответствует заданному запросу.

Вот соответствующие URL:

urlpatterns = [
    path('submittargets/', views.submittargets, name='submittargets'),
    path('entertargetdata/<int:id>', views.enterTargetForm,
         name='entertargetdata')
              ]

Просмотры:

def submittargets(request):
    accounts = Account.objects.order_by('Name')
    return render(request, 'submittargets.html', {'accounts': accounts})


def enterTargetForm(request, id):
    accounts = Account.objects.order_by('Name')
    questions = Question.objects.order_by('id')
    if request.method == 'POST':
        form = TargetForm(request.POST)
        print(form)
        if form.is_valid():
            if id == 0:
                formdetail = AccountTarget(
                    Account=request.POST['Account'])
            else:
                formdetail = get_object_or_404(AccountTarget, pk=id)
                formdetail.Account = request.POST['Account']
            formdetail.save()
            return redirect('addscores')
    else:
        if id == 0:
            form = TargetForm()
        else:
            formdetail = get_object_or_404(AccountTarget, pk=id)
            form = TargetForm(
                initial={'Account': formdetail.Account})
        return render(request, 'entertargetform.html', {'form': form, "id": id,
                                                        'accounts': accounts,
                                                        'questions':
                                                        questions})

Шаблоны: submittargets:

{% extends 'base.html' %}
{% block title %}{{ section.title }}Select Account{% endblock %}
{% block content %}
<br>
<div class="container">
  <h1 class="mt-4 mb-4 text-center">Select Account</h1>
  <br>
  <div class="col-md-2">
    <a type=".button" class="btn btn-lg btn-primary btn-block" href="{% url 'addscores' %}">Back</a>
  </div>
  <br>
  <hr>
  <div class="row mt-1">
    <div class="col-md-2">
      <strong>Account</strong>
    </div>
  </div>
  <hr>
  {% for p in accounts %}
  <div class="row mt-1">
    <div class="col-md-3">
      <strong>{{ p.Name }}</strong>
    </div>
    <div class="col-md-2">
      <a class="btn btn-primary ml-1" href="{% url 'entertargetdata' p.id %}"><i class="fa fa-pencil"></i></a>
    </div>
  </div>
  {% endfor %}
</div>
{% endblock content %}

entertargetdata:

{% extends 'base.html' %}
{% block title %}{{ section.title }}Enter Targets{% endblock %}
{% block content %}
<br>
<div class="container">
    <h1 class="mt-4 mb-4 text-center">Enter Targets for the Account</h1>
</div>
<div>
    <form method="post" id="questionForm" novalidate>
        {% csrf_token %}
        <div class="form-group">
            <label for="{{ form.PrimaryMetric.id_for_label }}">Primary Metric</label>
            {{ form.PrimaryMetric}}   
        </div>
    <br>
    <hr>
    <div class="row mt-1">
        <div class="col-md-2">
            <strong>Primary Metric</strong>
        </div>
        <div class="col-md-4">
            <strong>Secondary Metric</strong>
        </div>
        <div class="col-md-4 ">
            <strong>Tertiary Metric</strong>
        </div>
        <div class="col-md-2"></div>
    </div>
    {% for question in questions %}
    <hr width="100%">
    <div class="row mt-1">
        <div class="col-md-2">
            {{ question.PrimaryMetric.Metric }}
        </div>
        <div class="col-md-4">
            {{ question.SecondaryMetric.Metric }}
        </div>
        <div class="col-md-4">
            {{ question.TertiaryMetric.Metric }}
        </div>
        <input type="number" name="quantity" min="0" max="100">
    </div>
    {% empty %}
    <div class="row">
        <div class="col-md-12">
            No Questions in the database. <a href="{% url 'question_add' %}">Add the first question</a>.
        </div>
    </div>
    {% endfor %}
    <br>
    <br>
    <div class="wrapper">
        <a type=".button" class="btn btn-lg btn-primary btn-block" href="{% url 'addstuff' %}">Submit</a>
      </div>
      <br>
      <br>
</div>
{% endblock content %}

Модели:

class AccountTarget(models.Model):
    Account = models.ForeignKey('Account', on_delete=models.PROTECT)
    Question = models.ForeignKey('Question', on_delete=models.PROTECT)
    CurrentPercent = models.IntegerField()

    def __str__(self):
        return '<ID: {}, PrimaryMetric -> <{}> {}, SecondaryMetric -> <{}> {},\
                TertiaryMetric -> <{}> {}'.format(self.id,
                                                  self.AccountId,
                                                  self.QuestionId,
                                                  self.CurrentPercent)

Это горячий беспорядок, я знаю, но у меня есть не знаю, как пройти.

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