如何在Django的单个函数中传递两个不同的参数?

时间:2019-04-20 16:16:21

标签: python django django-models orm foreign-keys

在这里,我是Python新手,我正在尝试创建一个Web应用程序,使托运人可以将其卡车装货出售并接受运输商的投标,而运输商可以将其装船的投标公布。

我的views.py中具有列表视图功能,托运人可以在其中查看不同供应商发布的所有投标,然后他可以为该后装载“分配”一个供应商。

loads

为此,我创建了一个带有2个参数的函数:quiz.id(这是加载后的唯一主键)和供应商的ID。

urls.py

 path('confirm/<int:pk>/', teachers.ConfirmRFQ, name='ConfirmRFQ'),

views.py

@login_required
def ConfirmRFQ (request, pk,bi):
    quiz = Quiz.objects.get(pk=pk)
    bid = Bid.objects.get(pk=bi)
    quiz.status = 'Assigned'
    bid.confirmed = 'Assigned'
    quiz.save()
    bid.save()

    return redirect('teachers:quiz_change_list')

模板中的函数调用:

 <a href="{% url 'teachers:ConfirmRFQ' quiz.pk %}" class="btn btn-primary">Assign</a>

这里有什么问题吗?我不能这样传递两个论点吗?因为我不断得到

  

在/ teachers / quiz / 13 / results /

中的NoReverseMatch      

未找到带有参数'(13,33)'的'ConfirmRFQ'。尝试了1种模式:['教师/确认/(?P [0-9] +)/ $']

错误。

不确定这里是否需要模型,但是这里是:

models.py

class Quiz(models.Model):
    bid_status_choices = (('Active', 'Active'), ('Assigned', 'Assigned'), ('Dispatched', 'Dispatched'), ('Delayed', 'Delayed'),
            ('Delivered', 'Delivered'))
    mtypes =(('Fragile','Fragile'),('Non-Fragile','Non-Fragile'))

    owner = models.ForeignKey(User, on_delete=models.CASCADE, related_name='quizzes')
    name = models.CharField(max_length=255)
    subject = models.ForeignKey(Subject, on_delete=models.CASCADE, related_name='quizzes')
    origin = models.CharField(max_length=255, default=0)
    destination = models.CharField(max_length=255,default=0)
    total_trucks = models.IntegerField(default=0)
    material_type = models.CharField(max_length=255,default=0, choices=mtypes)
    scheduled_date = models.CharField(max_length=255,default=0)
    offered_price = models.IntegerField(default=0)
    status = models.CharField(max_length=255, default='Active', choices=bid_status_choices)

    def __str__ (self):
        return self.name

class Bid(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE, related_name='answers')
    text = models.CharField('Answer', max_length=255)
    bid_amount = models.CharField('bid_amount', max_length=255,default=0)
    is_correct = models.BooleanField('Correct answer', default=False)
    bid_date = models.DateTimeField(auto_now_add=True)

    def __str__ (self):
        return self.text

1 个答案:

答案 0 :(得分:3)

您可以使用任意数量的参数扩展路径,例如,模式可能如下所示:

path('confirm/<int:pk>/<int:bi>', teachers.ConfirmRFQ, name='ConfirmRFQ'),

因此,视图在此处需要两个参数:pkbi

例如,在模板中,您可以通过传递两个参数来检索URL,例如:

{% url 'teachers:ConfirmRFQ' pk=quiz.pk bi=mybid.pk %}

但是请注意,更新实体通常不是通过GET请求完成的(因为GET请求不应有任何副作用),而是通过POST请求完成的。