如何从Django中的视图中初始化外国基础下拉列表中的值



我需要在渲染表单时将foreferkey下拉=的值设置为URL参数。我能够成功将其他表单字段设置为此值,而不是外国键。

我正在尝试初始化"参考"表单字段,该字段是使用通过URL传递的参考_ID值的外键。我可以成功地将此值分配给表单中的其他三个字段,而不是"参考"。

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.description

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():
            instance = form.save(commit=False)
            try:
                order = Orders.objects.get(id=reference_id)
            except Orders.DoesNotExist:
                pass
            instance.reference = order
            instance.save()
            return redirect('add_manifest', reference_id=reference_id)
    #this is where my problem is
    form = CreateManifestForm(initial={'reference': reference_id}) 
    reference = request.POST.get('reference')
    manifests = Manifests.objects.all().filter(reference=reference)
    context = {
        'form': form,
        'reference_id': reference_id,
        'manifests' : manifests,
    }
    return render(request, 'add_manifest.html', context)

,以防万一需要:

urls.py

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

没有错误,但是该字段未设置为通过URL传递的值。就像我说的那样,如果我尝试

 form = CreateManifestForm(initial={'cases': reference_id})

然后,案例字段确实具有该值,所以我只是不确定在外键

的情况下如何导航

首先在这里了解概念:

class Manifests(models.Model):
    # Though this reference store id from Orders
    # Its actually a Orders object
    reference = models.ForeignKey(Orders)

在django中,当我们进行外键分配时,外国对象的主键仅存储在当前对象列中数据库中的,但是当我们以<</st>strong> Python代码,它返回整个外国对象

现在让我们在这里查看您的问题:

form = CreateManifestForm(initial={'reference': reference_id})

在上面的代码中,您使用 integer 对象初始化CreateManifestFormCreate'Reference'属性,该属性是错误,因为它要求 orders orders 要分配的对象。

form = CreateManifestForm(initial={'cases': reference_id})

及以上代码正常运行,因为"案例"接受整数对象。

因此,解决您的问题的方法是:

通过传递参考_id

查询订单对象
form = CreateManifestForm(initial={'reference': Orders.objects.get(id=reference_id)})

希望这个帮助!

查看类似的问题/答案,您需要在initial中为reference字段设置Orders实例,而不仅仅是相关对象的id

也许您可以尝试这样的事情,看看它是否有效:

reference_pk = request.POST.get('reference', '')
reference = Orders.objects.get(pk=reference_pk)
form = CreateManifestForm(initial={'reference': reference})

最新更新