如果请求==POST,我如何将默认值保存/插入表中



用户表:

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中使用fieldsexclude。文档。

如果希望模型中的某些字段获得默认值,请使用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()
  1. 首先,您从POST请求中获取数据
  2. 然后创建一个新的用户对象
  3. 然后添加您从POST请求中收到的信息
  4. 最后,添加要添加默认值的默认值
  5. 最后别忘了储蓄

但是,如果您希望其他字段也显示在您的表单中,那么正如另一个答案中所指出的,您可以在模型表单中使用"字段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保持为"否"

最新更新