如何在django中的单个函数中传递两个不同的参数?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在django中的单个函数中传递两个不同的参数?相关的知识,希望对你有一定的参考价值。
Python新手在这里,我正在尝试创建一个网络应用程序,托运人可以在销售中发布他们的卡车装载并接受运输商的出价,并且运输商可以在负载上发布他们的出价。
我在views.py中有一个列表视图功能,托运人可以看到不同供应商发布的所有出价,然后他可以为该后加载“分配”一个供应商。
为此,我创建了这个函数,该函数有两个参数:quiz.id(后加载的唯一主键)和供应商的ID。
URLs.朋友
path('confirm/<int:pk>/', teachers.ConfirmRFQ, name='ConfirmRFQ'),
views.朋友
@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>
这里有什么问题吗?我不能这样传两个论点吗?因为我一直在接受
NoReverseMatch at / teachers / quiz / 13 / results /
反向'ConfirmRFQ',找不到参数'(13,33)'。尝试了1种模式:['教师/确认/(?P [0-9] +)/ $']
错误。
不确定这里是否需要型号,但这里是:
models.朋友
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
答案
您可以使用任意数量的参数扩展路径,例如,模式应该如下所示:
path('confirm/<int:pk>/<int:bi>', teachers.ConfirmRFQ, name='ConfirmRFQ'),
因此视图需要两个参数:pk
和bi
。
例如,在您的模板中,您可以通过传递两个参数来检索URL,例如:
{% url 'teachers:ConfirmRFQ' pk=quiz.pk bi=mybid.pk %}
但请注意,更新实体通常不是通过GET请求完成的(因为GET请求不应该有任何副作用),而是通过POST请求。
以上是关于如何在django中的单个函数中传递两个不同的参数?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过控制器将两个不同模型的值作为 Laravel 8 中的单个返回变量传递给视图文件