如何在Django

时间:2019-06-21 22:47:00

标签: python django url get

我有一个用于输入“订单”的视图,该视图一旦提交便呈现一个视图,以创建一个“清单”,其中可能有多个条目。对于每个订单,用户输入一个“引用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模型中。

0 个答案:

没有答案