Hola, estoy intentando crear un metodo para guardar un nuevo registro de alquiler, primeramente lo hice con el Generic AlquilerCreate y lo guarda sin problemas.
pero estoy haciendo mi propio metodo porque necesito enviarle el usuario sin necesidad de ponerlo en el formulario, ademas al campo hora inicio y hora fin calcularlo con respecto a lo que seleccionen en el Select.
Obtengo el error:
| Exception Value: | "<Alquiler: Alquiler object>" needs to have a value for field "id" before this many-to-many relationship can be used. |
|---|
Tengo el proyecto en Github si quieren hecharle un vistazo
Espero su ayuda
Gracias de antemano!
ESTOS SON MIS MODELOS
class Vehiculo(models.Model):
placa = models.CharField(primary_key=True,max_length=100)
descripcion = models.CharField(max_length=100)
marca = models.CharField(max_length=100)
modelo = models.CharField(max_length=100)
cilindrada = models.CharField(max_length=100)
tipo = models.ForeignKey(Tipo)
km_recorrido = models.DecimalField(max_digits=20,decimal_places=2,default=Decimal('0.00'))
activo = models.BooleanField(default=True)
def __str__(self):
return self.descripcion
class Alquiler(models.Model):
fecha = models.DateTimeField(auto_now_add = timezone.now())
hora_inicio = models.TimeField()
hora_fin = models.TimeField()
cajero = models.ForeignKey(User)
cliente = models.ForeignKey(Cliente)
vehiculos = models.ManyToManyField(Vehiculo)
class Meta:
permissions = (
("add_alquileres", "Puede crear Alquileres"),
)
def __int__(self):
return self.cliente
def motos(self):
return ', '.join([Vehiculo.descripcion for Vehiculo in self.vehiculos.all()])
ESTE ES MI FORMULARIO
TIEMPO = (
('15 MINUTOS','15 MINUTOS'),
('30 MINUTOS','30 MINUTOS'),
('1 HORA','1 HORAS'),
('2 HORAS','2 HORAS'),
)
class AlquilerForm(forms.ModelForm):
tiempo = forms.CharField(widget=forms.Select(choices=TIEMPO, attrs={'class': 'form-control'}))
class Meta:
model = Alquiler
fields = ('cliente','tiempo','vehiculos')
widgets = {
'cliente': forms.Select(attrs={'class': 'form-control'}),
'vehiculos': forms.SelectMultiple(attrs={'class': 'form-control'}),
}
Y ESTA ES MI VISTA
def Alquiler_crear(request):
if request.method == 'POST':
alquiler = Alquiler()
cajero = request.user.username
cliente = request.POST.get('cliente')
vehiculos = request.POST.get('vehiculos')
user_model = User()
user_model.username = cajero
cliente_model = Cliente()
cliente_model.nombre = cliente
alquiler.cajero = user_model
alquiler.cliente = cliente_model
alquiler.vehiculos = vehiculos
alquiler.save()
messages.success(request, 'Alquiler creado.')
return redirect(reverse_lazy('alquiler:alquiler_list'))
else:
form = AlquilerForm()
context = {'form': form}
return render(request, 'alquiler/alquiler_form.html',context)