无需用户输入即可设置表单值

时间:2016-01-11 13:22:41

标签: python django

最初,我使用初始值填充表单并禁用该字段,以便让用户知道为此表单随机选择的选项。但是我遇到了一些问题,而且在我的表单中甚至没有向用户显示这个问题似乎更好,但稍后会通过messages通知他们。虽然我不太清楚如何做到这一点。我需要在工作表单提交时为我的工作模型指定一种颜色。我有:

这是我用来选择分配给每个新工作的颜色。

  cur_jobs = Job.objects.filter(enddate__gte=(datetime.date.today()-timedelta(days=7)))
  all_colors = Color.objects.all()
  cur_colors = []
  for i in cur_jobs:
    cur_colors.append(i.color)
  aval_colors = [x for x in all_colors if x not in cur_colors]
  choice = random.choice(aval_colors)

这些是我的模特:

class Job(models.Model):
    ---other stuff---
    jobnum = models.CharField("Job Number",max_length=6, blank=False,unique=True,error_messages={'unique':'This Job Number is already taken! =)'})
    color = models.ForeignKey('Color')

class Color(models.Model):
    color = models.CharField(max_length=20, blank=False)

    def natural_key(self):
        return (self.color)

    def __str__(self): #python 3.3. is __str__
        return self.color

如何将choice作为color实例提交jobform

工作表格:

class LimitedJobForm(forms.ModelForm):
jobnum = forms.CharField(label='Job Number')
class Meta:
    model = Job
    fields = ['jobnum','color','client','status']

1 个答案:

答案 0 :(得分:1)

如果您希望自动设置color,如果您甚至不希望它显示给用户,请不要将其放在表单中:

class LimitedJobForm(forms.ModelForm):

    jobnum = forms.CharField(label='Job Number')

    class Meta:
        model = Job
        fields = ['jobnum', 'client', 'status']  # no 'color' field

相反,在验证表单之后和保存之前,直接在视图中的模型实例上设置颜色:

form = LimitedJobForm(request.POST)

if form.is_valid():
    form.instance.color = pick_random_color()
    form.save()