这里是 Python 新手,我正在尝试创建一个网络应用程序,托运人可以在其中发布他们的卡车 cargo 进行销售并接受运输商的出价,而运输商可以发布他们对 cargo 的出价。
我的 views.py 中有一个 ListView 功能,托运人可以在其中查看不同供应商发布的所有出价,然后他可以为该后装货“分配”一个供应商。
为此,我创建了这个函数,它接受 2 个参数:quiz.id(这是后加载的唯一主键)和供应商的 ID。
网址.py
path('confirm/<int:pk>/', teachers.ConfirmRFQ, name='ConfirmRFQ'),
View .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>
这里有什么问题吗?我不能传递两个参数吗?因为我不断得到
NoReverseMatch at /teachers/quiz/13/results/
Reverse for 'ConfirmRFQ' with arguments '(13, 33)' not found. 1 pattern(s) tried: ['teachers/confirm/(?P[0-9]+)/$']
错误。
不确定这里是否需要模型,但这里是:
模型.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
请您参考如下方法:
你可以用任意数量的参数扩展你的路径,例如这里的模式应该是这样的:
path('confirm/<int:pk>/<b><int:bi></b>', teachers.ConfirmRFQ, name='ConfirmRFQ'),
所以 View 在这里需要两个参数:pk 和bi。
例如,在您的模板中,您可以通过传递两个参数来检索 URL,例如:
{% url 'teachers:ConfirmRFQ' pk=quiz.pk <b>bi=mybid.pk</b> %}
但请注意,更新实体通常不通过 GET 请求完成(因为 GET 请求不应该有任何副作用),而是通过 POST 请求完成。
