ich möchte einige URLs umstellen von PK zu slugfields.
Der aktuelle code sieht so aus:
Code: Alles auswählen
urlpatterns = [
url(r'^$', views.MemoriesIndexListView.as_view(), name='index'),
url(r'^(?P<slug>[-\w]+)/$', views.MemoriesDetailView.as_view(), name='detail'),
url(r'^add/(?P<slug>[-\w]+)/$', views.CreateCommentView.as_view(), name='add_comment'), #slug
#url(r'^add-comment/(?P<question_id>\d+)/$', views.CreateCommentView.as_view(), name='add_comment'), #PK
]
Code: Alles auswählen
views.py
class CreateContentView(LoginRequiredMixin, CreateView):
model = Content
fields = ["content", ]
message = _("Thank you! Your answer has been posted.")
def form_valid(self, form):
form.instance.user = self.request.user
form.instance.question_id = self.kwargs["question_id"]
return super().form_valid(form)
def get_success_url(self):
messages.success(self.request, self.message)
return reverse("remember:index")
#return reverse("remember:question_detail", kwargs={"pk": self.kwargs["question_id"]})
Code: Alles auswählen
models.py
class Memories(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='remember_user')
timestamp = models.DateTimeField(auto_now_add=True)
slug = models.SlugField(max_length=200, null=True, blank=True)
#gekürzt
def save(self, *args, **kwargs):
if self.slug: # edit
if slugify(self.firstname+"-"+self.lastname) != self.slug:
self.slug = generate_unique_slug(Memories, self.firstname+"-"+self.lastname)
else: # create
self.slug = generate_unique_slug(Memories, self.firstname+"-"+self.lastname)
super(Memories, self).save(*args, **kwargs)
class Content(models.Model):
question = models.ForeignKey(Memories, on_delete=models.CASCADE)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='remember_content_user')
content = MarkdownxField()
uuid_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=True)
timestamp = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ["-timestamp"]
verbose_name = _("Content")
verbose_name_plural = _("Content")
def __str__(self):
return self.content
Dazu habe ich an und für sich 2 Fragen bzw. Probleme
Das eine ist, dass die die URL erst garnicht aufrufen kann.
Das andere, (das kommt erst später), wie kann ich dann beim speichern zurück auf die detail url?NoReverseMatch
Aktuell wird das in der views mit
Code: Alles auswählen
return reverse("remember:question_detail", kwargs={"pk": self.kwargs["question_id"]})
Code: Alles auswählen
return reverse("remember:index")