I'm making a events website, I need to show the event history of a user logged in.
Currently I'm only passing Event instance to below template not User instance
So when he clicks on Register for Event button on a certain event with 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%}
He is redirected to url
path('update-event/<value1>/<value2>/',web_views.update_event,name='update-event')
Then the update_event view where database is updated,and is redirected to a simple stable template 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')
This is the Participated model
class Participated(models.Model):
user_id=models.ForeignKey(User,on_delete=models.CASCADE)
event_id=models.ForeignKey(Event,on_delete=models.PROTECT)
I'm getting an error
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.
So how to insert values to Partcipated model?
Edit: Even after changing the path as below it's not working
path('update-event/<int:value1>/<int:value2>/',web_views.update_event,name='update-event')
Edit2: My complete urls.py(I'm using only the main urls.py for all urls)
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)
I also added user instance to my event view like this
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)
This is django-project in github https://github.com/GaganKaranth/fests-bangalore/tree/main
CodePudding user response:
The path will try to find patterns that have ints for user_id and event_id if you do this:
# urls.py
urlpatterns = [
...
path('update-event/<int:user_id>/<int:event_id>/',web_views.update_event,name='update-event'),
...
]
Then in your view, you can grab those, but they must have the same names you gave them in the url patterns, like this:
# views.py
def update_event(request, user_id, event_id):
user= User.objects.get(id=user_id)
ev=Event.objects.get(id=event_id)
...
Then your html url anchor tage will pass these two ints, in order:
<a href="{% url 'update-event' user.id event.id %}">
