我是关于Django,Python和一般网络编程的新手。我有一个可能是一个愚蠢的问题,但我在这里试图解决它一周前。
我有一个关于食物的Django项目,我想要两种形式,第一种是注册用户(membresia或usuario)这很好用。另一个是注册餐馆。
我的Django版本是1.10
models.py
from django.db import models
from django.utils import timezone
# Create your models here.
class Membresia(models.Model):
nombre = models.CharField(max_length=100)
cedula = models.CharField(max_length=100)
celular = models.CharField(max_length=100)
email = models.CharField(max_length=100)
ciudad = models.CharField(max_length=100)
direccion = models.CharField(max_length=100)
creado_en = models.DateTimeField(
default=timezone.now)
class Restaurante(models.Model):
nombre = models.CharField(max_length=100)
nombre_responsable = models.CharField(max_length=100)
direccion = models.CharField(max_length=100)
celular = models.CharField(max_length=100)
ciudad = models.CharField(max_length=100)
email = models.CharField(max_length=100)
creado_en = models.DateTimeField(
default=timezone.now)
forms.py
from django import forms
from .models import Membresia, Restaurante
class membresiaform(forms.ModelForm):
class Meta:
model = Membresia
fields = ('nombre', 'cedula','celular','email','ciudad','direccion')
widgets = {
'nombre': forms.TextInput(attrs={'class': 'form-control','placeholder': 'Tu nombre'}),
'cedula': forms.TextInput(attrs={'class': 'form-control','placeholder': 'Tu número cédula'}),
'celular': forms.TextInput(attrs={'class': 'form-control','placeholder': 'Tu número celular'}),
'email': forms.TextInput(attrs={'class': 'form-control','placeholder': 'Tu correo electrónico'}),
'ciudad': forms.TextInput(attrs={'class': 'form-control','placeholder': 'Ciudad donde vives'}),
'direccion': forms.TextInput(attrs={'class': 'form-control','placeholder': 'Tu dirección'}),
}
class restauranteform(forms.ModelForm):
class Meta:
model = Restaurante
fields = ('nombre','nombre_responsable','direccion','celular','ciudad','email')
widgets = {
'nombre': forms.TextInput(attrs={'class': 'form-control','placeholder': 'Nombre del restaurante'}),
'nombre_responsable': forms.TextInput(attrs={'class': 'form-control','placeholder': 'Nombre del representante '}),
'direccion': forms.TextInput(attrs={'class': 'form-control','placeholder': 'Dirección del restaurante'}),
'celular' : forms.TextInput(attrs={'class': 'form-control','placeholder': 'El celular de contácto'}),
'ciudad': forms.TextInput(attrs={'class': 'form-control','placeholder': 'Ciudad de ubicación restaurante'}),
'email': forms.TextInput(attrs={'class': 'form-control','placeholder': 'Correo eléctronico'}),
}
views.py
from django.shortcuts import render,render_to_response
from .forms import membresiaform, restauranteform
from django.http import HttpResponseRedirect
from django.template import RequestContext
from django.views.decorators.csrf import csrf_protect
from django.utils import timezone
# Create your views here.
def registrar_usuario_web(request):
if "submit_us" in request.POST:
form = membresiaform(request.POST)
if form.is_valid():
form.creado_en = timezone.now()
form.save()
return HttpResponseRedirect('/')
else:
form = membresiaform()
return render(request,'web/registrarusuario.html', {'form': form})
def registrar_restaurante_Web(request):
if "submit_res" in request.POST:
form = restauranteform(request.POST)
if form.is_valid():
form.creado_en = timezone.now()
form.save
return HttpResponseRedirect('/')
else:
form = restauranteform()
return render(request,'web/registrarrestaurante.html',{'form':form})
registrarrestaurante.html
{% block content %}
<form action="/restaurante/registrar/" method="POST">
<div class="post">
<h1>Registrar restaurante</h1>
{% csrf_token %}
{{ form.as_p }}
{% endblock %}
<div class="form-group">
<input type="submit" name="submit_res" class="btn btn-submit" value="Enviar">
</div>
</form>
我无法在我的Restaurante数据库中保存数据。我没有看到错误,表格有效。如果我从Shell保存数据没有问题。我在这里搜索问题,但看起来每个人都有问题要在同一个视图中有两种形式,但我认为这不是我的问题,我有人可以帮助我,我会非常感激。
答案 0 :(得分:0)
我是一名rails开发者,但我相信你也可以在Django中做到这一点。
我会在每个提交按钮和表单中添加ID,然后使用JS提交它们。
<input type="submit" name="submit_res" class="btn btn-submit" value="Enviar" id='submit_res'>
然后
$('#submit_res').click(function () {
$('#restauranteform').submit();
});
$('#id_of_other_button').click(function () {
$('#id_of_other_form').submit();
});
答案 1 :(得分:0)
您无法将数据保存到表中的真正原因是:
form.save
应该是
form.save()
解决了其他几件事需要考虑。例如,不允许您的会员登录吗?如果是的话,你在这里重新发明轮子。你可以使用django.contrib.auth.models.User作为你的用户模型,并使用许多经过试验和测试的django身份验证系统之一,例如django-registration,只需很少或不费力就可以完成这项任务。