用户表:
mysql> describe blog_users;
+--------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(255) | NO | | NULL | |
| slug | varchar(255) | NO | | NULL | |
| password | varchar(300) | NO | | NULL | |
| password_token | varchar(300) | NO | | NULL | |
| email | varchar(255) | NO | | NULL | |
| email_verified | tinyint(1) | NO | | NULL | |
| email_token | varchar(255) | NO | | NULL | |
| email_token_expiry | datetime | NO | | NULL | |
| tos | tinyint(1) | NO | | NULL | |
| active | tinyint(1) | NO | | NULL | |
| last_login | datetime | NO | | NULL | |
| last_action | datetime | NO | | NULL | |
| is_admin | tinyint(1) | NO | | NULL | |
| role | varchar(255) | NO | | NULL | |
| created | datetime | NO | | NULL | |
| modified | datetime | NO | | NULL | |
+--------------------+--------------+------+-----+---------+----------------+
17 rows in set (0.00 sec)
形式:
<form action="/dosave" method="POST">{% csrf_token %}
<label for="id_username">Username:</label>
{{ user.username }}
<label for="id_password">Password:</label>
{{ user.password }}
<label for="id_email">Email:</label>
{{ user.email }}
<input type=submit value="Submit" />
</form>
我只能从输入字段中获得用户名、密码和电子邮件。其他列值将为默认值。如何在保存期间保存这些列的默认值?
型号:
class Users(models.Model):
username = models.CharField(max_length=255)
slug = models.CharField(max_length=255)
password = models.CharField(max_length=300)
password_token = models.CharField(max_length=300)
email = models.CharField(max_length=255)
email_verified = models.BooleanField()
email_token = models.CharField(max_length=255)
email_token_expiry = models.DateTimeField(auto_now_add=True)
tos = models.BooleanField()
active = models.BooleanField()
last_login = models.DateTimeField(auto_now_add=True)
last_action = models.DateTimeField(auto_now_add=True)
is_admin = models.BooleanField()
role = models.CharField(max_length=255)
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now_add=True)
def __unicode__(self):
return self.username
class UsersModelForm(forms.ModelForm):
class Meta:
model = Users
您应该在ModelForm中使用fields
或exclude
。文档。
如果希望模型中的某些字段获得默认值,请使用default。
您似乎使用了自定义user model
,因为Django Users
没有slug字段。(如果我错了,请告诉我)
由于您已经创建了自己的users表,因此需要输入的任何信息都可以在视图中完成。在你看来,你可以这样做if request.method=="POST":
# Extract the POST values
username = request.POST.get('username ', False)
.
.
.
# Create new user object
user = User()
# Fill the POST request information
user.username = username
.
.
# Fill the default values
user.slug = 'What ever you want'
.
.
.
# Save the object
user.save()
- 首先,您从POST请求中获取数据
- 然后创建一个新的用户对象
- 然后添加您从POST请求中收到的信息
- 最后,添加要添加默认值的默认值
- 最后别忘了储蓄
但是,如果您希望其他字段也显示在您的表单中,那么正如另一个答案中所指出的,您可以在模型表单中使用"字段or '
排除"
class UserForm(ModelForm):
class Meta:
model = User
fields = ('username','password','email','slug')
如果您想排除几个字段并显示其余字段,则可以使用exclude
作为
class UserForm(ModelForm):
class Meta:
model = User
exclude = ('role',)
希望它能帮助
除非我误解了这个问题,否则只需将default
列设置为您希望该列默认为的任何列,并将Null
保持为"否"