Python 如何将HTML中的布尔字段输入到Django模型中?
我使用Django表单创建用户,并通过添加布尔字段扩展了默认用户模型,因此为其定义了一个新表单。但我无法将HTML表单中的输入输入到这个布尔字段。我要更改我的HTML表单代码吗? 以下是我的代码示例: models.pyPython 如何将HTML中的布尔字段输入到Django模型中?,python,django,django-models,django-views,django-forms,Python,Django,Django Models,Django Views,Django Forms,我使用Django表单创建用户,并通过添加布尔字段扩展了默认用户模型,因此为其定义了一个新表单。但我无法将HTML表单中的输入输入到这个布尔字段。我要更改我的HTML表单代码吗? 以下是我的代码示例: models.py # accounts.models.py from django.db import models from django.contrib.auth.models import User class SpecialUser(models.Model): user =
# accounts.models.py
from django.db import models
from django.contrib.auth.models import User
class SpecialUser(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
flag = models.BooleanField()
def __str__(self):
return self.title
forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django.forms.widgets import CheckboxInput
from .models import SpecialUser
class RegisterForm(UserCreationForm):
email = forms.EmailField()
class Meta:
model = User
fields = ["username", "email", "password1", "password2"]
class SuperUserForm(forms.ModelForm):
class Meta:
model = SpecialUser
fields = ['flag']
widgets = {
'flag': CheckboxInput(attrs={'class': 'flag'}),
}
views.py
def register(request):
if request.method == 'POST':
form = RegisterForm(request.POST)
sp_form = SuperUserForm(request.POST)
if form.is_valid() and sp_form.is_valid():
user = form.save()
sp_form = sp_form.save(commit=False)
sp_form.user = user
sp_form.save()
messages.success(request, 'Account created!')
return redirect('login')
else:
form = RegisterForm()
sp_form = SuperUserForm()
messages.warning(request, 'Your account cannot be created.')
return render(request, 'register.html', {'form': form})
HTML表单代码:
<form method="post" class="form-group">
{% csrf_token %}
{{ form|crispy }}
<label for="flag">Special User: </label>
<input id="flag" class="flag" type="checkbox" name="flag">
<button type="submit" class="btn btn-success">Sign up</button>
</form>
{%csrf_令牌%}
{{form | crispy}}
特殊用户:
注册
对于初学者来说,这通常不是您希望在Django应用程序中扩展用户模型的方式。您可能希望从AbstractUser继承并将字段添加到该模型中,然后运行迁移。至少在这种情况下,这是理想的,然后您可以简单地在RegisterForm.fields上定义字段,并让{{form | crispy}}
为您呈现表单。当然,你可以调用form.save()
,继续你的生活
为了说明这可能不起作用的原因,除非绝对必要,否则为表单呈现自己的字段通常不是一种好的做法。如果您坚持这样做,请注意Django会在id前面加上
id\uu
,因此在您的情况下,它将是视图中的..
和
通过将sp_form
添加到传递到render()
的上下文dict中,可以将其加载到上下文数据中。这将允许模板查看变量。例如:
return render(request, 'register.html', {'form': form, 'sp_form': sp_form})
然后可以在模板中渲染它。例如,在主窗体下面:
{{ form|crispy }}
{{ sp_form|crispy }}
非常感谢。问题解决了。但是如何在HTML文件中呈现SpecialsPerform属性呢?就像我使用{{user.username}}
获取用户名一样。但是{{user.phonenumber}
不起作用(这是第二个表单的属性)。请帮我做这个!谢谢你分享你的知识!我是个十足的初学者。我试着做实习工作。你能给我推荐一些与Django搭配的书吗?两勺Django是一个很棒的系列。似乎是来自可靠来源的可靠帖子。祝你在冒险中好运,我的朋友。不断地打破东西,让它们变得更好,确保你在做的时候玩得开心。干杯