Soy nuevo en Django y estoy tratando de completar previamente uno de los campos de mi formulario con un slug.
Estoy recibiendo la babosa de otro modelo. No estoy usando ForeignKey porque eso me muestra una lista con mis objetos y quiero guardar en el formulario el mismo slug que estoy usando en la url.
Tal vez no estoy pensando esto bien. ¿Qué tengo que hacer?
¡Gracias!
Estos son mis modelos:
from django.db import models class Thing(models.Model): name = models.CharField(max_length=255,) rut = models.CharField(max_length=12, blank= True) cel = models.CharField(max_length=12, blank= True) slug = models.SlugField(unique=True) class Control(models.Model): id_p = models.SlugField() pa = models.CharField(max_length=3,)mis formularios
from django.forms import ModelForm from collection.models import Thing, Control, Medicamento class ThingForm(ModelForm): class Meta: model = Thing fields = ('name', 'rut','cel','pet',) class ControlForm(ModelForm): class Meta: model = Control exclude = ['id_p']Esto es lo que estoy haciendo en las vistas.
def add_control(request, slug): thing = Thing.objects.get(slug=slug) form_class = ControlForm form_class(initial={'id_p':thing}) if request.method == 'POST': form = form_class(request.POST) if form.is_valid(): form.save() return redirect('thing_detail', slug=thing.slug) else: form = form_class() return render(request, 'things/control.html', { 'thing': thing, 'form': form, })Entonces, ¡lo descubro! En views.py, después de "if form.is_valid():" pongo esto:
prev = form.save(commit=False) prev.id_p = thing.slug prev.save()De esa manera pongo los datos en el campo excluido antes de confirmar el formulario.