Tener problemas para pasar una slug para actualizar, para que obtenga los datos correctos -- python campo con django campo con django-views campo con slug campo con django-generic-views camp Relacionados El problema

Having trouble passing a slug to UpdateView so that it gets the correct data


1
vote

problema

Español

Estoy tratando de permitirle a un usuario que edite la información ingresada en su proyecto usando UpdateView. Seguí recibiendo un error que decía "Se debe llamar a un proyecto de actualización de visión de detalle genérico con un objeto PK o una babosa". He intentado apuntar a la babosa dentro de la clase UpdateView, pero no puedo lograr que funcione. Soy nuevo en Django, ¡así que cualquier ayuda sería muy apreciada!

vistas

  class CreateProject(CreateView):     model = UserProject     form_class = UserProjectForm     template_name = 'howdidu/create_project.html'      def form_valid(self, form):         userproject = form.save(commit=False)         form.instance.user = self.request.user         userproject.save()         self.object = userproject         return super(CreateProject, self).form_valid(form)      def get_success_url(self):         project_username = self.request.user.username         project_slug = self.object.slug         return reverse('user_project', kwargs={'username':project_username, 'slug': project_slug})  class UpdateProject(UpdateView):     model = UserProject     form_class = UserProjectForm     template_name = 'howdidu/update_project.html'     slug_field = 'slug'      def form_valid(self, form):         userproject = form.save(commit=False)         form.instance.user = self.request.user         userproject.save()         self.object = userproject         return super(UpdateProject, self).form_valid(form)      def get_success_url(self):         project_username = self.request.user.username         project_slug = self.object.slug         return reverse('user_project', kwargs={'username':project_username, 'slug': project_slug})   

URLS

  urlpatterns = patterns('',         url(r'^$', views.index, name='index'),         url(r'^register_profile/$', views.register_profile, name='register_profile'),         url(r'^update_profile/$', views.update_profile, name='update_profile'),         url(r'^create_project/$', login_required(views.CreateProject.as_view()), name='create_project'),         url(r'^update_project/$', login_required(views.UpdateProject.as_view()), name='update_project'),         url(r'^(?P<username>w+)/$', views.profile_page, name='user_profile'),         url(r'^(?P<username>w+)/(?P<slug>[-w]+)/$', views.project_page, name='user_project'),         )   

modelos

  class UserProject(models.Model):     user = models.ForeignKey(User)     title = models.CharField(max_length=100)     project_overview = models.CharField(max_length=1000)     project_picture = models.ImageField(upload_to='project_images', blank=True)     date_created = models.DateTimeField(auto_now_add=True)     project_views = models.IntegerField(default=0)     project_likes = models.IntegerField(default=0)     project_followers = models.IntegerField(default=0)     slug = models.SlugField(max_length=100, unique=True) #should this be unique or not?      def save(self, *args, **kwargs):         self.slug = slugify(self.title)         super(UserProject, self).save(*args, **kwargs)      def __unicode__(self):         return self.title   
Original en ingles

I am trying to allow a user to edit the information entered into their project using UpdateView. I kept getting an error saying "Generic detail view UpdateProject must be called with either an object pk or a slug." I have tried pointing to the slug within the UpdateView class, but can't get it to work. I am new to Django, so any help would be much appreciated!

views

class CreateProject(CreateView):     model = UserProject     form_class = UserProjectForm     template_name = 'howdidu/create_project.html'      def form_valid(self, form):         userproject = form.save(commit=False)         form.instance.user = self.request.user         userproject.save()         self.object = userproject         return super(CreateProject, self).form_valid(form)      def get_success_url(self):         project_username = self.request.user.username         project_slug = self.object.slug         return reverse('user_project', kwargs={'username':project_username, 'slug': project_slug})  class UpdateProject(UpdateView):     model = UserProject     form_class = UserProjectForm     template_name = 'howdidu/update_project.html'     slug_field = 'slug'      def form_valid(self, form):         userproject = form.save(commit=False)         form.instance.user = self.request.user         userproject.save()         self.object = userproject         return super(UpdateProject, self).form_valid(form)      def get_success_url(self):         project_username = self.request.user.username         project_slug = self.object.slug         return reverse('user_project', kwargs={'username':project_username, 'slug': project_slug}) 

urls

urlpatterns = patterns('',         url(r'^$', views.index, name='index'),         url(r'^register_profile/$', views.register_profile, name='register_profile'),         url(r'^update_profile/$', views.update_profile, name='update_profile'),         url(r'^create_project/$', login_required(views.CreateProject.as_view()), name='create_project'),         url(r'^update_project/$', login_required(views.UpdateProject.as_view()), name='update_project'),         url(r'^(?P<username>\w+)/$', views.profile_page, name='user_profile'),         url(r'^(?P<username>\w+)/(?P<slug>[-\w]+)/$', views.project_page, name='user_project'),         ) 

models

class UserProject(models.Model):     user = models.ForeignKey(User)     title = models.CharField(max_length=100)     project_overview = models.CharField(max_length=1000)     project_picture = models.ImageField(upload_to='project_images', blank=True)     date_created = models.DateTimeField(auto_now_add=True)     project_views = models.IntegerField(default=0)     project_likes = models.IntegerField(default=0)     project_followers = models.IntegerField(default=0)     slug = models.SlugField(max_length=100, unique=True) #should this be unique or not?      def save(self, *args, **kwargs):         self.slug = slugify(self.title)         super(UserProject, self).save(*args, **kwargs)      def __unicode__(self):         return self.title 
              
 
 

Lista de respuestas

1
 
vote

UpdateView de Django requiere un parámetro PK o Slug proveniente de la URL correspondiente de forma predeterminada. En su caso, debe cambiar la URL a su vista de actualización a

  url(r'^update_project/(?P<slug>[-w]+)/$',     login_required(views.UpdateProject.as_view()),     name='update_project'),   

Donde Slug es la babosa de su proyecto.

 

Django's UpdateView requires pk or slug parameter coming from the corresponding url by default. In your case you need to change the url to your UpdateProject view to

url(r'^update_project/(?P<slug>[-\w]+)/$',     login_required(views.UpdateProject.as_view()),     name='update_project'), 

where slug is your project's slug.

 
 
     
     
0
 
vote

Crear un archivo utils.py en su aplicación. utilizando Slugify de Django Utils.

  import random import string   from django.utils.text import slugify    def random_string_generator(size=10, chars=string.ascii_lowercase + string.digits):     return "".join(random.choice(chars) for _ in range(size))   def unique_slug_generator(instance, new_slug=None):     if new_slug is None:         slug = new_slug     else:         slug=slugify(instance.model field of your choice)     Klass = instance.__class__     qs_exists = Klass.objects.filter(slug=slug).exists()     if qs_exists:         new_slug = "{slug}-{randstr}".format(             slug=slug,             randstr=random_string_generator(size=4)             )         return unique_slug_generator(instance, new_slug=new_slug)     return slug   

Agregar una babosa a su modelo

  slug = models.SlugField(null=True, blank=True)   

Agreguelo a su archivo urls.py

  url(r'^update/(?P<slug>[w-]+)/$', profileUpdate.as_view(), name='update'),   
 

create a utils.py file in your app. using slugify from django utils.

import random import string   from django.utils.text import slugify    def random_string_generator(size=10, chars=string.ascii_lowercase + string.digits):     return "".join(random.choice(chars) for _ in range(size))   def unique_slug_generator(instance, new_slug=None):     if new_slug is None:         slug = new_slug     else:         slug=slugify(instance.model field of your choice)     Klass = instance.__class__     qs_exists = Klass.objects.filter(slug=slug).exists()     if qs_exists:         new_slug = "{slug}-{randstr}".format(             slug=slug,             randstr=random_string_generator(size=4)             )         return unique_slug_generator(instance, new_slug=new_slug)     return slug 

add a slug to your model

slug = models.SlugField(null=True, blank=True) 

add it to your urls.py file

url(r'^update/(?P<slug>[\w-]+)/$', profileUpdate.as_view(), name='update'), 
 
 
0
 
vote
  class UserProject(UpdateView):     model = BlogSlider     fields = ['title', 'sub_title', 'description', 'image']     template_name = 'update.html'   

Use un formulario y use {{form.as_p}}.

 
class UserProject(UpdateView):     model = BlogSlider     fields = ['title', 'sub_title', 'description', 'image']     template_name = 'update.html' 

use a form and use {{ form.as_p }}.

 
 
 
 

Relacionados problema

2  Vistas genéricas de Django con múltiples parámetros  ( Django generic views with multiple parameters ) 
es posible usar una vista genérica con parámetros adicionales en la asignación de URL - I.E. Tengo el siguiente modelo: class Route(models.Model): area...

7  Usando la vista genérica basada en clase, DetailView con una MODELFORM, revela un error, ¿cómo proceder?  ( Using class based generic view detailview with a modelform reveals a bug how t ) 
Me ha impresionado la forma en que un sitio web funcional puede ir junto con vistas genéricas en los tutoriales. Además, el flujo de trabajo para el procesami...

5  Django - QUERYSET VS Modelo en vista genérica  ( Django queryset vs model in generic view ) 
Soy bastante nuevo en Django y preguntándome cuál es la diferencia entre definir el modelo VS QuerySet en una vista genérica como ListView. Aquí está mi ejemp...

0  Django CreateView Cancelar con campos vacíos  ( Django createview cancel with empty fields ) 
Tengo un modelo CountryCreateView CountryCreateView y estoy tratando de agregar un botón de cancelación. Sin embargo, si no se llena algo en cada campo y p...

1  Django Dynamic Q Objetos en Vista Generic  ( Django dynamic q objects in generic view ) 
Quiero poder pasar una variable atrapada en la URL a un objeto Q para una vista genérica. He creado una vista genérica que se importa como my_view.view que ...

0  Problema con Django URL Mapping / DetailView  ( Issue with django url mapping detailview ) 
Soy nuevo en Django y he estado haciendo un proyecto de muestra. He estado tratando de usar Genérico de detalles. Parece que la redirección de URL funciona bi...

0  El formulario genérico de Django no se muestra cuando se incluye en otra plantilla  ( Django generic formview not showing when included in other template ) 
Primero, qué funciona actualmente: Tengo un formulario definido en forms.py : class EnrollForm(forms.Form): course_id = forms.IntegerField(required=...

13  ¿Cómo sobrescribir la clase de respuesta en el marco de descanso de Django (DRF)?  ( How overwrite response class in django rest framework drf ) 
Quiero sobrescribir Response CLASE DE DJANGO SEST Framework Para que ese parámetro respaldan la respuesta contiene tres parámetros message , status y da...

0  Redireccionar desde la vista genérica a la vista genérica  ( Redirect from generic view to generic view ) 
Estoy construyendo una página para el registro de usuarios. Quiero que el cliente ingrese la información paso a paso, así que quiero separar los formularios. ...

0  Cómo las vistas basadas en clase saben que necesitan llamar el método de despacho  ( How class based views know that they need to call dispatch method ) 
Sabemos que dispatch es el primer método que se llama cuando nuestra URL llega al CBV(Class Based Views) . También sabemos que para llamar a estas vistas, ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos