在呈现表单时,我需要将我的ForeignKey dropdown =的值设置为url参数。我能够成功将其他表单字段设置为此值,但不能将ForeignKey设置为该值。
我正在尝试使用通过URL传递的reference_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})
然后,cases字段确实具有该值,所以我不确定在外键的情况下如何导航
答案 0 :(得分:1)
首先在这里了解概念:
class Manifests(models.Model):
# Though this reference store id from Orders
# Its actually a Orders object
reference = models.ForeignKey(Orders)
在Django中,无论何时我们进行外键分配,外对象的主键仅存储在数据库中的当前对象列中,但是当我们在< strong> python代码,它返回整个异物。
现在让我们在这里查看您的问题:
form = CreateManifestForm(initial={'reference': reference_id})
在上面的代码中,您正在使用 Integer 对象初始化<{1}}'reference'属性,该对象错误,因为它需要 Orders 对象待分配。
CreateManifestFormCreate
由于“ cases”接受Integer对象,因此上述代码正确运行。
所以解决您的问题的方法是:
通过传递reference_id来查询Orders对象
form = CreateManifestForm(initial={'cases': reference_id})
希望得到帮助!
答案 1 :(得分:0)
查看similar question/answer,您需要在Orders
的{{1}}字段中设置initial
实例,而不仅是相关字段的reference
对象。
也许您可以尝试这样的方法,看看是否可行:
id