Reputation: 71
not sure why I'm getting this error , I have checked my views and paths , which i think seem fine, the noreversematch error I get shows the arguments ('wonderful', 'bass', 1)' are correct, but it throws back this error:
NoReverseMatch at /instrument-detail/wonderful/1/ Reverse for 'create_eq' with arguments '('wonderful', 'bass', 1)' not found. 1 pattern(s) tried: ['create\-eq/(?P<track_slug>[-a-zA-Z0-9_]+)/(?P<instrument_slug>[-a-zA-Z0-9_]+)/int:id>/$']
here are my views, urls, models, and the template where i have the link to 'create_eq' :
urls.py
path('create-eq/<slug:track_slug>/<slug:instrument_slug>/int:id>/', views.create_eq, name='create_eq'),
path('instrument-detail/<slug:track_slug>/<int:id>/', views.instrument_detail, name='instrument_detail'),
views.py
@login_required
def create_eq(request, track_slug, instrument_slug, id):
user = request.user
track = get_object_or_404(Track, id=id)
instrument = get_object_or_404(Instrument, id=id)
if request.method == "POST":
form = EQCreateForm(request.POST)
if form.is_valid():
data = form.save(commit=False)
data.user = user
data.save()
return redirect('profile', slug=track.slug, id=track.id)
else:
form = EQCreateForm()
return render(request, 'feed/create_eq.html', {'form': form })
@login_required
def instrument_detail(request, track_slug, id):
user = request.user
track = get_object_or_404(Track, id=id)
my_inst = Instrument.objects.filter(track_id=track.id)
instrument_obj = get_object_or_404(Instrument, id=id)
if my_inst.exists():
instruments = Instrument.objects.filter(track_id=track.id)
context = {
'instruments': instruments,
'track': track,
'instrument': instrument_obj,
}
return render(request, 'feed/instrument_detail.html', context)
else:
print('There are no instruments set in your track')
return redirect('create_instrument', track_slug=track.slug, id=track.id)
models.py
class Instrument(models.Model):
title = models.CharField(max_length=120)
timestamp = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
track = models.ForeignKey('Track', on_delete=models.CASCADE, null=True)
artist = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
slug = models.SlugField(null=True, unique=True)
def __str__(self):
return 'title:{} track:{} artist:{}'.format(self.title, self.track, self.artist)
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.title)
return super(Instrument, self).save(*args, **kwargs)
class EQ(models.Model):
frequency = models.DecimalField(decimal_places=3, max_digits=20)
description = models.TextField(max_length=250, null=True, blank=True)
boost = models.DecimalField(decimal_places=2, max_digits=10, default=0)
cut = models.DecimalField(decimal_places=2, max_digits=10, default=0)
updated = models.DateTimeField(auto_now=True)
instrument = models.ForeignKey(Instrument,on_delete=models.CASCADE)
track = models.ForeignKey('Track', on_delete=models.CASCADE)
user_name = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return 'frequency:{} instrument:{} track:{} boost:{} cut:{} user_name:{} description:{}'.format(self.frequency, self.instrument, self.track, self.boost, self.cut, self.user_name, self.description)
class Track(models.Model):
title = models.CharField(max_length=100)
description = models.TextField(max_length=250, null=True, blank=True)
artist = models.CharField(max_length=250)
timestamp = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
slug = models.SlugField(null=True, unique=True)
instrument_detail.html
{% for items in instruments %} <div class="col">
<div class="card one-track">
<a href="{% url 'create_eq' track.slug instrument.slug track.id %}"><h5>{{ items.title }}</h5></a>
</div>
</div>
{% endfor %}
Upvotes: 0
Views: 39
Reputation: 2380
you have a typo mistake, you forgot the <
in your url path.
it's <int:id>
not int:id>
.
path('create-eq/<slug:track_slug>/<slug:instrument_slug>/<int:id>/', views.create_eq, name='create_eq'),
Upvotes: 1