es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Django crear publicación

Estoy intentando crear una nueva publicación en un foro, y funciona, también imprimo si el formulario es válido, pero cuando voy a comprobar después de hacer la publicación, no se muestra. En la página de administración, la publicación está allí, aprobada, pero faltan los campos de etiquetas y categoría. Se agregaron cuando se creó la publicación, si no obtengo un error. Pero tengo que añadirlos manualmente en la página de administración para que la publicación se muestre en el foro.

Aquí está mi modelo de Publicación (Post) en models

class Post(models.Model):
    title = models.CharField(max_length=400)
    slug = models.SlugField(max_length=400, unique=True, blank=True)
    user = models.ForeignKey(Author, on_delete=models.CASCADE)
    content = HTMLField()
    categories = models.ManyToManyField(Category)
    date = models.DateTimeField(auto_now_add=True)
    approved = models.BooleanField(default=True)
    tags = TaggableManager()
    comments = models.ManyToManyField(Comment, blank=True)
    # closed = models.BooleanField(default=False)
    # state = models.CharField(max_length=40, default="zero")

def save(self, *args, **kwargs):
    if not self.slug:
        self.slug = slugify(self.title)
    super(Post, self).save(*args, **kwargs)

def __str__(self):
    return self.title

Aquí está mi archivo views.py

@login_required
def create_post(request):
    context = {}
    form = PostForm(request.POST or None)
    if request.method == "POST":
        if form.is_valid():
            print("\n\nform is valid")
            author = Author.objects.get(user=request.user)
            new_post = form.save(commit=False)
            new_post.user = author
            new_post.save()

            return redirect('forums')

    context.update({
        'form': form,
        'title': 'Crear nueva publicación'
    })
    return render(request, 'forums/create_post.html', context)

El html es muy simple, solo para probar.

<form method="POST">
    {% csrf_token %}
    {{form|crispy}}

    <!-- Enviar publicación -->
    <input type="submit" value="Guardar">
</form>

Cualquier ayuda sería muy apreciada.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Basándose en el código proporcionado, parece que los campos de etiquetas y categoría no se están agregando al formulario cuando se envía. Es posible que los campos no se estén incluyendo en PostForm o que no se estén validando correctamente.

    Una forma de solucionar este problema sería agregar manualmente los campos de categoría y etiqueta al formulario en la vista antes de renderizar la plantilla.

    Por ejemplo, en la vista create_post, podrías agregar las siguientes líneas de código antes de renderizar la plantilla:

    form.fields['categories'].queryset = Category.objects.all()
    form.fields['tags'].widget = forms.TextInput(attrs={'placeholder': 'Ingrese etiquetas separadas por comas'})
    

    Esto debería agregar la lista de categorías al menú desplegable del campo de categoría y también agregar un texto de marcador de posición para el campo de etiqueta.

    Además, es posible que desees verificar PostForm para asegurarte de que los campos de categoría y etiqueta estén incluidos y validados correctamente.

    class PostForm(forms.ModelForm):
        class Meta:
            model = Post
            fields = ('title', 'content', 'categories', 'tags')
    

    Al incluir los campos de categoría y etiqueta en el formulario y validarlos en el método clean del formulario, los campos deberían guardarse correctamente junto con la publicación.

    ¡Espero que esto ayude!

Comments are closed.