我有一个用于输入“订单”的视图,该视图一旦提交便呈现一个视图,以创建一个“清单”,其中可能有多个条目。对于每个订单,用户输入一个“引用ID”,并且在相应的清单中,引用ID必须与订单相同(Manifests模型中的引用ID是Orders模型的外键)。
我需要一种方法,使订单的参考ID可以针对清单中输入的每一行发布到清单模型中,而无需用户每次都输入。
我试图通过URL传递参考ID(我在Django 1.10中),但无法弄清楚如何利用它。我还想弄清楚使用.get从订单中获取引用ID并将其设置为Manifest视图中的只读字段的想法,但是我无法弄清楚。
MODELS.PY
class Orders(models.Model):
reference = models.CharField(max_length=50, unique=True)
ultimate_consignee = models.ForeignKey(Customers, blank=True)
ship_to = models.CharField(max_length=500, blank=True)
vessel = models.CharField(max_length=100, blank=True)
def __str__(self):
return self.reference
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.reference
VIEWS.PY
def add_order(request):
if request.method == "POST":
form = CreateOrderForm(request.POST)
objectlist = Customers.objects.all()
if form.is_valid():
reference_id = form.cleaned_data.get('reference')
form.save()
return redirect('add_manifest')#, kwargs={'reference_id': form.cleaned_data['reference']})
else:
form = CreateOrderForm()
objectlist = Customers.objects.all()
context = {
'form': form,
'objectlist': objectlist,
}
return render(request, 'add_order.html', context)
def add_manifest(request):
if request.method == "POST":
form = CreateManifestForm(request.POST)
reference = request.POST.get('reference')
if form.is_valid():
form.save()
return redirect('add_manifest')
form = CreateManifestForm()
#below is used to filter the table in add_manifest.html
reference = request.POST.get('reference')
manifests = Manifests.objects.all().filter(reference=reference)
context = {
'form': form,
'manifests': manifests,
}
return render(request, 'add_manifest.html', context)
FORMS.PY
class CreateOrderForm(forms.ModelForm):
class Meta:
model = Orders
fields = ('reference', 'ultimate_consignee', 'ship_to', 'vessel')
class CreateManifestForm(forms.ModelForm):
class Meta:
model = Manifests
fields = ('reference', 'cases', 'description', 'count')
用户在创建订单时输入的参考ID必须与清单中输入的每一行一起保存到Manifest模型中。