我正在尝试存储使用来自两个不同模型的值,以在表单中显示为选项并将它们存储在新模型中。
这就是我现在所拥有的。
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模型中看不到它们。 我在这里错过了什么吗?
答案 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)
...