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 ModelForm nunca pasa is_valid()

Soy nuevo en Django y actualmente estoy tratando de almacenar datos ingresados desde un formulario en un modelo/base de datos. La parte que creo que está causando el problema es que no quiero que todos los campos del modelo sean accesibles en el formulario. El modelo que tengo tiene los siguientes campos:

item_name = models.CharField(max_length=100)
description = models.TextField()
date_referred = models.DateTimeField(default=timezone.now)
full_name = models.CharField(max_length=100)
email = models.EmailField(max_length=100)
phone_number = models.CharField(max_length=17, blank=True)
column_number = models.IntegerField()
notes = models.TextField()
colour = models.CharField(max_length=6)
user = models.ForeignKey(User, on_delete=models.CASCADE)

El ModelForm que estoy utilizando es el siguiente:

class ReferralForm(ModelForm):
    class Meta:
        model = kanban_item
        fields = ["item_name", "description", "full_name", "email", "phone_number"]

El código dentro del archivo views.py es el siguiente:

def submit_referrals(request):
    form = ReferralForm()
    if request.method == "POST":
        form = ReferralForm()
        print(request.POST)
        if form.is_valid():
            print("VALID")
            referral = form.save(commit=False)
            referral.user = request.user
            referral.column_number = 0
            referral.colour = "ffffff"
            referral.save()
        else:
            print("NOT VALID")

Como puedes ver, estoy tratando de crear un modelo a partir del formulario, luego agregar los campos adicionales y luego guardar el modelo en la base de datos. Esto no está funcionando, ya que cada vez que envío el formulario, mi código nunca pasa del método is_valid en el formulario.

Cualquier sugerencia o respuesta es apreciada, ya que estoy perdido. Gracias.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás creando la instancia del formulario dos veces en tu archivo views.py, lo cual podría estar causando algunos problemas.

    Intenta cambiar esta línea:

    form = ReferralForm()
    

    por esta:

    form = ReferralForm(request.POST)
    

    Esto pasará los datos POST a la instancia del formulario, permitiendo validar los datos.

    Además, si deseas establecer algunos campos en el modelo antes de guardarlo, podrías sobrescribir el método save en el propio formulario:

    class ReferralForm(ModelForm):
        class Meta:
            model = kanban_item
            fields = ["item_name", "description", "full_name", "email", "phone_number"]
    
        def save(self, commit=True, user=None):
            referral = super().save(commit=False)
            referral.user = user
            referral.column_number = 0
            referral.colour = "ffffff"
            if commit:
                referral.save()
            return referral
    

    Luego, en tu archivo views.py, simplemente puedes llamar a:

    form.save(commit=True, user=request.user)
    

    para guardar los datos del formulario en el modelo con los campos adicionales.

    Espero que esto te ayude. Avísame si tienes alguna otra pregunta.

Comments are closed.