管理员表单中的Valuerror

时间:2018-02-22 01:49:28

标签: django django-forms

以下是我的模特和表格:

models.py

class Employee(models.Model):
    id = models.PositiveIntegerField(primary_key=True, verbose_name='Employee Code')
    name = models.CharField(max_length=200, verbose_name='Employee Name')

    def get_names(self):
        return Employee.objects.values_list('name', 'name')

class JobQueue(models.Model):
    emp_name = models.ForeignKey(Employee, on_delete=models.CASCADE)
    product_code = models.ManyToManyField(Product)

forms.py

class JobQueueForm(forms.ModelForm):

    emp = Employee()
    prod = Product()

    emp_name = forms.ChoiceField(choices = emp.get_names)
    product_code = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, choices=prod.get_products)

    def save(self, commit=True):
        return super(JobQueueForm, self).save(commit = commit)

    class Meta:
        model = JobQueue
        fields = ('emp_name', 'product_code')

当我尝试从JobQueue表单添加新员工时,出现以下错误:

/ admin / timesheet / jobqueue / add /的ValueError 无法分配"' some_name'":" JobQueue.emp_name"必须是"员工"实例

知道我在这里做错了吗?

1 个答案:

答案 0 :(得分:0)

你有一个名字冲突,基本上,这是一个红色的鲱鱼为你调试。

您的表单中有emp_name ChoiceField(字符串)但是当您将表单保存到数据库时,支持模型JobQueue期待emp_namesave一个雇员的实例。

在您的情况下,您需要覆盖表单中的emp_name方法,该方法已经显示您已经执行的操作,并在那里获取覆盖def save(self, commit=True): self.emp_name = Employee.objects.get(name=self.cleaned_data['emp_name']) return super(JobQueueForm, self).save(commit=commit) 并保存它的员工。

{{1}}