如何使用 href/url 中的值更新视图中的模型字段?

How to update model fields from views with values from a href/url?

我正在制作一个活动网站,我需要显示登录用户的活动历史记录。

目前我只将事件实例传递给下面的模板而不是用户实例

因此,当他在 ID 为 event.id 的特定事件上单击“注册事件”按钮时。

{%for event in events%}
        <div class='card-event'>
                <div style="font-weight: 600; margin-top:5px;font-size: 20px;">{{event.name}}</div>
                <div style="margin:10px 0 5px 0;">{{event.event_desc}}</div>
                <div style="margin:5px 0 10px 0;">Entry Fee: {{event.entry_fee}}</div>
                <a href="{%url 'update-event' value1=user.id value2=event.id%}"><button class='register-button'>Register for Event</button></a>
        </div>
        {%endfor%}

他被重定向到 url

path('update-event/<value1>/<value2>/',web_views.update_event,name='update-event')

然后 update_event 更新数据库的视图,并被重定向到一个简单的稳定模板 my_events.html

def update_event(request,value1,value2):
    user= User.objects.get(id=value1)
    ev=Event.objects.get(id=value2)
    data=Participated(user_id=user,event_id=ev)
    data.save()
    return redirect(request,'webpage/my_events.html')

这是参与的模型

class Participated(models.Model):
    user_id=models.ForeignKey(User,on_delete=models.CASCADE)
    event_id=models.ForeignKey(Event,on_delete=models.PROTECT)

我收到一个错误

Reverse for '<WSGIRequest: GET '/update-event/1/4/'>' not found. '<WSGIRequest: GET '/update-event/1/4/'>' is not a valid view function or pattern name.

那么如何将值插入参与模型?

编辑:即使如下所示更改路径后它也不起作用

path('update-event/<int:value1>/<int:value2>/',web_views.update_event,name='update-event')

Edit2:我的完整 urls.py(我只对所有 url 使用主 urls.py)

from django.contrib import admin
from django.contrib.auth import views as auth_views
from django.urls import path,include
from django.conf import settings
from django.conf.urls.static import static
from webpage import views as web_views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include('webpage.urls')),
    path('college/',web_views.college,name='college'),
    path('fest/',web_views.fest,name='fest'),
    path('fest/college/',web_views.fest_college,name='fest-college'),
    path('fest/technical/',web_views.fest_technical,name='fest-technical'),
    path('fest/cultural/',web_views.fest_cultural,name='fest-cultural'),
    path('fest/sports/',web_views.fest_sports,name='fest-sports'),
    path('fest/<value>/',web_views.fest_clg,name='fest-clg'),
    path('event/',web_views.event,name='event'),
    path('event/<value>/',web_views.event_fest,name='event-fest'),
    path('my-events/',web_views.my_events,name='my-events'),
    path('update-event/<int:value1>/<int:value2>/',web_views.update_event,name='update-event'),
    path('register/',web_views.register,name='register'),
    path('login/',auth_views.LoginView.as_view(template_name='webpage/login.html'),name='login'),
    path('logout/',auth_views.LogoutView.as_view(template_name='webpage/logout.html'),name='logout')
]

if settings.DEBUG:
    urlpatterns+=static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

我还像这样将用户实例添加到我的事件视图中

def event(request):
    cur=request.user
    context={
        'events':Event.objects.all(),
        'user': User.objects.get(id=cur.id)
    }
    return render(request,'webpage/event.html',context)

这是 github https://github.com/GaganKaranth/fests-bangalore/tree/main

中的 django 项目

路径将尝试查找具有 user_id 和 event_id 整数的模式,如果您这样做:

# urls.py

urlpatterns = [
    ...
    path('update-event/<int:user_id>/<int:event_id>/',web_views.update_event,name='update-event'),
    ...
]

然后在您看来,您可以抓取那些,但它们必须与您在 url 模式中给它们的名称相同,如下所示:

# views.py
def update_event(request, user_id, event_id):
    user= User.objects.get(id=user_id)
    ev=Event.objects.get(id=event_id)
    ...

然后你的htmlurl锚点将按顺序传递这两个整数:

<a href="{% url 'update-event' user.id event.id %}">