如何自动初始化Django模型中的字段?

时间:2018-11-22 07:42:12

标签: django python-3.x django-models django-forms

我在Django中具有以下模型,基本上,一旦用户插入了一些数据(即,

),我需要自动初始化5个字段中的3个

Models.py

class Assignment(models.Model):
    assignment       = models.CharField(max_length=60)
    comments         = models.CharField(max_length=60)
    starting_date    = models.DateField()
    points           = models.IntegerField()
    STATUS = (('A', 'Active'), ('C', 'Cancelled'), ('D', 'Done'))
    status           = models.CharField(max_length=1, choices=STATUS)

Forms.py

from django import forms
from .models import Task

class TaskForm(forms.ModelForm):
    class Meta:
        model = Task
        starting_date = datetime.now()
        fields = ['task_description', 'task_comments', 'starting_date', 'priority', 'points']

输入表单

<!-- Input form to request to values-->
<div class="panel-heading">Add a new assignment </div>
  <form id ="insert_new_assign" class="form-horizontal" method="POST">
    {% csrf_token %}
    <div class="panel-body">
      <div class="input-group">
        <input class="form-control" name="insert_new_assign_field" type="text" placeholder="Insert your new assignment here" />
        <input class="form-control" name="insert_new_comment_field" type="text" placeholder="Any comment you want to add?" />
        <button class="btn btn-primary" type="submit">Add</button>
      </div>
    </div>
  </form>
</div>

See the JS fiddle for quick reference

基本上,当用户输入新的作业和注释时,我希望Django保存这两个字段,并使用当前时间,0点和A状态自动初始化其他字段。每当我尝试保存新记录时,都会出现错误The view engine.views.home didn't return an HttpResponse object,这是正常现象,因为Django希望用户完成所有字段,而不仅仅是两个。

以前的研究

根据一些研究,我发现只有one field can be completed in a Django model-id-,但同时他们提到Custom Managers是可以解决我所遇到问题的类,但是{{ 3}}。

我的主要问题是:

如何在Django中指示要保存两个字段并使用当前日期和时间,0点和A状态自动初始化其他字段?

在此问题上的任何帮助将不胜感激,也可以随时改进此问题。

1 个答案:

答案 0 :(得分:0)

在Bidhan提出了一些建议之后,我能够获得以下代码来绕过该问题。

from django.utils import timezone

class Assignment(models.Model):
    STATUS = (
        ('A', 'Active'),
        ('C', 'Cancelled'),
        ('D', 'Done')
    )

    assignment       = models.CharField(max_length=60)
    comments         = models.CharField(max_length=60)
    starting_date    = models.DateField(default=timezone.now())
    points           = models.IntegerField(default=0)
    status           = models.CharField(max_length=1, choices=STATUS, default='A')