【问题标题】:Default ModelForm Field (Foreign Key) From URL ParameterURL 参数中的默认 ModelForm 字段(外键)
【发布时间】:2019-11-10 19:59:57
【问题描述】:

我有一个包含 reference_id 的 URL,此参考 ID 被传递到我的 HTML 文件以默认 ModelForm 的值。我的问题是我默认的字段 ModelForm 字段是另一个模型的外键。我目前正在这样做的方式,通过HTML文件,由于上述原因,表单没有提交。我想知道如何将此表单字段设置为默认为通过 URL 传递的参数,使其只读,并仍然将其发布到模型。在下面发布的表单中,它是我尝试默认的“参考”字段,在 HTML 中,标签是我当前的操作方式。任何想法或替代方案都非常受欢迎。

模型.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'),

【问题讨论】:

    标签: python django modelform


    【解决方案1】:

    您可以在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)
    

    【讨论】:

    • 谢谢你的回答——虽然我有点困惑这对我的情况有什么帮助......我会在你上面的代码之后的 HTML 文件中做什么?我相信我的问题是表单无效,因为我默认字段是外键@phoibos
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 2021-10-09
    相关资源
    最近更新 更多