Поле ModelForm по умолчанию (внешний ключ) из параметра URL - PullRequest
0 голосов
/ 29 июня 2019

У меня есть URL, который содержит reference_id, этот ссылочный идентификатор передается в мой HTML-файл по умолчанию для значения ModelForm. Моя проблема в том, что поле ModelForm, которое я по умолчанию задаю, является внешним ключом для другой модели. То, как я сейчас это делаю, через HTML-файл, форму не отправляет из-за вышеизложенного. Мне интересно, как я могу установить для этого поля формы значение по умолчанию для параметра, переданного через URL-адрес, сделать его доступным только для чтения и по-прежнему отправлять его в модель. В приведенной ниже форме это поле «ссылка», которое я пытаюсь использовать по умолчанию, а в HTML тег - это то, как я это делаю в настоящее время. Любые мысли или альтернативы приветствуются.

MODELS.PY

class Manifests(models.Model):

    reference = models.ForeignKey(Orders)
    cases = models.IntegerField()
    description = models.CharField(max_length=1000)
    count = models.IntegerField()

    def __str__(self):
        return self.cases

FORMS.PY

class CreateManifestForm(forms.ModelForm):
    class Meta:
        model = Manifests
        fields = ('reference', 'cases', 'description', 'count')

VIEWS.PY

def add_manifest(request, reference_id):

    if request.method == "POST":
        form = CreateManifestForm(request.POST)

        if form.is_valid():
            form.save()
            return redirect('add_manifest', reference_id=reference_id)

    form = CreateManifestForm()
    manifests = Manifests.objects.all()

    context = {
        'form': form,
        'reference_id': reference_id,
        'manifests' : manifests,
    }

    return render(request, 'add_manifest.html', context)

ADD_MANIFEST.HTML

  <div class="container">
    <form method="POST">

      <br>
      <br>
      {% csrf_token %}

        <div class="column">
          <label for="form.reference">Reference ID: </label><br>
          <input type="text" value="{{ reference_id }}">
          <br>
        </div>
        <div class="column">
          <label for="form.description">Description: </label>
          <br>
          {{ form.description}}
        </div>
        <div class="column">
          <label for="form.cases">Cases: </label>
          <br>
          {{ form.cases }}
          <br>
        </div>
        <div class="column">
          <label for="form.count">Count: </label>
          <br>
          {{ form.count }}
          <br>
          <br>
        </div>
          <br>
          <br>


      <button type="submit" name="add_mani" style="border-color: #7395AE;">Add Line</button>
    </form>

URLS.PY

url(r'^add_manifest/(?P<reference_id>\d+)/$', add_manifest, name='add_manifest'),

1 Ответ

0 голосов
/ 29 июня 2019

Вы можете изменить экземпляр, который создаст форму, с макушки головы в views.py:

# ... import the Orders model

def add_manifest(request, reference_id):

    if request.method == "POST":
        form = CreateManifestForm(request.POST)

        if form.is_valid():
            instance = form.save(commit=False)
            try:
                order = Orders.objects.get(id=reference_id)
            except Orders.DoesNotExist:
                pass  # do error handling here
            instance.reference = order
            instance.save()
            return redirect('add_manifest', reference_id=reference_id)

    form = CreateManifestForm()
    manifests = Manifests.objects.all()

    context = {
        'form': form,
        'reference_id': reference_id,
        'manifests' : manifests,
    }

    return render(request, 'add_manifest.html', context)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...