我需要在渲染表单时将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})