在admin中将模型值显示为多选选项

时间:2018-02-20 14:29:43

标签: django django-forms

我正在尝试存储使用来自两个不同模型的值,以在表单中显示为选项并将它们存储在新模型中。

这就是我现在所拥有的。

models.py

class Employee(models.Model):
    name = models.CharField(max_length=200)

class Product(models.Model):
    code = models.CharField(primary_key=True, max_length=5)

class JobQueue(models.Model):
    emp_name = models.CharField(max_length=200)
    product_code = models.CharField(max_length=5)

forms.py

class JobQueueForm(forms.ModelForm):
    emp_choices = Employee._meta.get_field('name').choices
    product_code_choices = Product._meta.get_field('code').choices

    emp_name = forms.ChoiceField(choices = emp_choices)
    product_code =forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, choices=product_code_choices)

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

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

admin.py

class JobQueueAdmin(admin.ModelAdmin):
    form = JobQueueForm

    fieldsets = (
    (None,{
        'fields': ('emp_name', 'product_code'),}),
)

    def save_model(self, request, obj, form, change):
        super(JobQueueAdmin, self).save_model(request, obj, form, change)
admin.site.register(models.Employee, AuthorAdmin)
admin.site.register(models.Product, ProductAdmin)
admin.site.register(models.JobQueue, JobQueueAdmin)

我确实在Employee和Product模型中存储了值,但我在Admin门户中的JobQueue模型中看不到它们。 我在这里错过了什么吗?

enter image description here

1 个答案:

答案 0 :(得分:0)

emp_choices = Employee._meta.get_field('name').choices

这条线没有意义。它会尝试获取Employee.name字段的选项,但您没有为模型中的name字段指定任何选项。

class Employee(models.Model):
    name = models.CharField(max_length=200)

如果要生成数据库中所有现有员工的选项列表,则可以定义执行此操作的方法:

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

然后在表单中使用此方法:

class JobQueueForm(forms.ModelForm):
    emp_name = forms.ChoiceField(choices=get_names)
    ...