after updating some fields in my model and hit the update button, i get this error that says No URL to redirect to. Either provide a url or define a get_absolute_url method on the Model.
I am redirecting to the dashboard after the update is done, but it seem not to be redirecting to that url anylonger, NOTE: the url still exists and works fine
what could the problem be here?
class ProductInline():
form_class = PredictionForm
model = Predictions
template_name = "core/create/create_bet.html"
def form_valid(self, form):
named_formsets = self.get_named_formsets()
if not all((x.is_valid() for x in named_formsets.values())):
return self.render_to_response(self.get_context_data(form=form))
self.object = form.save(commit=False)
self.object.user = self.request.user
self.object.current_amount = self.object.amount
self.object.save()
for name, formset in named_formsets.items():
formset_save_func = getattr(self, 'formset_{0}_valid'.format(name), None)
if formset_save_func is not None:
formset_save_func(formset)
else:
formset.save()
messages.success(self.request, "Your bet have been created.")
return redirect('core:dashboard')
def formset_variants_valid(self, formset):
"""
Hook for custom formset saving.. useful if you have multiple formsets
"""
variants = formset.save(commit=False) # self.save_formset(formset, contact)
# add this, if you have can_delete=True parameter set in inlineformset_factory func
for obj in formset.deleted_objects:
obj.delete()
for variant in variants:
variant.predictions = self.object
variant.save()
class PredictionUpdate(ProductInline, UpdateView):
def get_context_data(self, **kwargs):
ctx = super(PredictionUpdate, self).get_context_data(**kwargs)
ctx['named_formsets'] = self.get_named_formsets()
return ctx
def get_current_object(self, id):
prediction = Predictions.objects.get(id=id)
return {
"prediction":prediction
}
def get_named_formsets(self):
return {
'variants': PredictionDataFormSet(self.request.POST or None, self.request.FILES or None, instance=self.object, prefix='variants'),
}
def dispatch(self, request ,*args, **kwargs):
obj = self.get_object()
if obj.user != self.request.user:
messages.warning(self.request, "You are not allowed to edit this bet!")
return redirect("core:dashboard")
if obj.status == "finished":
messages.warning(self.request, "You cannot edit this bet again, send an update request to continue.")
return redirect("core:dashboard")
# raise Http404("You are not allowed to edit this Post")
return super(PredictionUpdate, self).dispatch(request, *args, **kwargs)
def form_valid(self, form):
instance = form.instance
if instance.participants.exists() and instance.status == 'cancelled':
messages.warning(self.request, "You cannot cancel a bet that already have participants")
return redirect("core:dashboard")
else:
form.save()
return HttpResponseRedirect(self.get_success_url())