Django:更新时如何发送两个pk?
当我更新与moneybook相关的moneylog时,出现以下错误: NoReverseMatch at/moneylogs/update/8/ 未找到参数为“(“”,8)”的“delete”的反转。尝试了1个模式:[“moneylogs/(?P[0-9]+)/delete/(?P[0-9]+)/$”] 我猜这是因为没有moneybook.pk,但我不知道如何处理 谁能帮我一下吗? 型号.pyDjango:更新时如何发送两个pk?,django,Django,当我更新与moneybook相关的moneylog时,出现以下错误: NoReverseMatch at/moneylogs/update/8/ 未找到参数为“(“”,8)”的“delete”的反转。尝试了1个模式:[“moneylogs/(?P[0-9]+)/delete/(?P[0-9]+)/$”] 我猜这是因为没有moneybook.pk,但我不知道如何处理 谁能帮我一下吗? 型号.py class Moneylog(core_models.TimeStampedModel):
class Moneylog(core_models.TimeStampedModel):
moneybook = models.ForeignKey(
moneybook_models.Moneybook, on_delete=models.CASCADE)
pay_day = models.DateTimeField(default=NOW)
payer = models.ForeignKey(
tempfriend_models.Tempfriend, on_delete=models.CASCADE, related_name="payer")
dutch_payer = models.ManyToManyField(
tempfriend_models.Tempfriend, related_name="dutch_payer", blank=True)
price = models.IntegerField()
category = models.CharField(max_length=10)
memo = models.TextField()
class moneylog_update(UpdateView):
model = moneylog_models.Moneylog
form_class = forms.UpdateMoneylogForm
template_name = "moneylogs/update.html"
def form_valid(self, form):
moneylog = form.save(commit=False)
moneybook = moneybook_models.Moneybook.objects.get(
pk=moneylog.moneybook.id)
moneylog.save()
form.save_m2m()
return redirect(reverse("moneybooks:detail", kwargs={'pk': moneybook.pk}))
app_name = "moneylogs"
urlpatterns = [
path("create/<int:pk>/",
views.moneylog_create.as_view(), name="create"),
path("update/<int:pk>/",
views.moneylog_update.as_view(), name="update"),
path("<int:moneybook_pk>/delete/<int:moneylog_pk>/",
views.moneylog_delete, name="delete"),
]
视图.py
class Moneylog(core_models.TimeStampedModel):
moneybook = models.ForeignKey(
moneybook_models.Moneybook, on_delete=models.CASCADE)
pay_day = models.DateTimeField(default=NOW)
payer = models.ForeignKey(
tempfriend_models.Tempfriend, on_delete=models.CASCADE, related_name="payer")
dutch_payer = models.ManyToManyField(
tempfriend_models.Tempfriend, related_name="dutch_payer", blank=True)
price = models.IntegerField()
category = models.CharField(max_length=10)
memo = models.TextField()
class moneylog_update(UpdateView):
model = moneylog_models.Moneylog
form_class = forms.UpdateMoneylogForm
template_name = "moneylogs/update.html"
def form_valid(self, form):
moneylog = form.save(commit=False)
moneybook = moneybook_models.Moneybook.objects.get(
pk=moneylog.moneybook.id)
moneylog.save()
form.save_m2m()
return redirect(reverse("moneybooks:detail", kwargs={'pk': moneybook.pk}))
app_name = "moneylogs"
urlpatterns = [
path("create/<int:pk>/",
views.moneylog_create.as_view(), name="create"),
path("update/<int:pk>/",
views.moneylog_update.as_view(), name="update"),
path("<int:moneybook_pk>/delete/<int:moneylog_pk>/",
views.moneylog_delete, name="delete"),
]
url.py
class Moneylog(core_models.TimeStampedModel):
moneybook = models.ForeignKey(
moneybook_models.Moneybook, on_delete=models.CASCADE)
pay_day = models.DateTimeField(default=NOW)
payer = models.ForeignKey(
tempfriend_models.Tempfriend, on_delete=models.CASCADE, related_name="payer")
dutch_payer = models.ManyToManyField(
tempfriend_models.Tempfriend, related_name="dutch_payer", blank=True)
price = models.IntegerField()
category = models.CharField(max_length=10)
memo = models.TextField()
class moneylog_update(UpdateView):
model = moneylog_models.Moneylog
form_class = forms.UpdateMoneylogForm
template_name = "moneylogs/update.html"
def form_valid(self, form):
moneylog = form.save(commit=False)
moneybook = moneybook_models.Moneybook.objects.get(
pk=moneylog.moneybook.id)
moneylog.save()
form.save_m2m()
return redirect(reverse("moneybooks:detail", kwargs={'pk': moneybook.pk}))
app_name = "moneylogs"
urlpatterns = [
path("create/<int:pk>/",
views.moneylog_create.as_view(), name="create"),
path("update/<int:pk>/",
views.moneylog_update.as_view(), name="update"),
path("<int:moneybook_pk>/delete/<int:moneylog_pk>/",
views.moneylog_delete, name="delete"),
]
app_name=“moneylogs”
URL模式=[
路径(“创建/”,
views.moneylog\u create.as\u view(),name=“create”),
路径(“更新/”,
views.moneylog\u update.as\u view(),name=“update”),
路径(“/delete/”,
views.moneylog_delete,name=“delete”),
]
模板(moneylog\u Form\u update.html)
。。。
{{cta}}
改为
<a href="{% url 'moneylogs:delete' moneylog.moneybook_id moneylog.pk %} " >
因为你在moneylog的更新页面上
然而,传递moneybook\u id实际上根本不需要这样做,因为moneylog总是有它,所以moneylog
实例足以确定它链接到哪个moneybook