在Django Admin

时间:2018-05-07 03:43:48

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

我正在创建一个应用程序来管理面试过程。在一次采访中,候选人可以由一个或多个面试官面试,面试官可以面试一个或多个候选人。这类似于圆桌"专访。模型的简化版本是:

class Interviewer(models.Model):
    interviewer_id = models.AutoField(primary_key=True)
    first_name = models.CharField(max_length=200, blank=False, null=False)
    last_name = models.CharField(max_length=200, blank=False, null=False)
    candidates = models.ManyToManyField('Candidate', through='Interview')

class Candidate(models.Model):
    candidate_id = models.PositiveIntegerField(
        primary_key=True, blank=False, null=False)
    first_name = models.CharField(max_length=200, blank=False, null=False)
    last_name = models.CharField(max_length=200, blank=False, null=False

class Interview(models.Model):
    interview_name = models.CharField(max_length=200, blank=True, null=True)
    candidates = models.ForeignKey(
        Candidate, on_delete=models.CASCADE, blank=True, null=True, related_name='candidates')
    interviewers = models.ForeignKey(
        Interviewer, on_delete=models.CASCADE, blank=True, null=True, related_name='interviewers')

在Django admin中,对于面试模型,为面试添加一个条目意味着我必须为每个候选人和面试官创建一个条目。如果有很多候选人和/或访调员,这个过程很麻烦。我想做的是将所有候选人和面试官添加到特定的面试中。 我将模型更改为使用ModelMultipleChoiceField表单,而不是Django用于外键的默认SelectField。

class InterviewAdminForm(forms.ModelForm):
    interviewers = forms.ModelMultipleChoiceField(
        queryset=Interviewer.objects.all(),
        widget=FilteredSelectMultiple(
            verbose_name='interviewers', is_stacked=False
        )
    )

    candidates = forms.ModelMultipleChoiceField(
        queryset=Candidate.objects.all(),
        widget=FilteredSelectMultiple(
            verbose_name='candidates', is_stacked=False
        )
    )

    class Meta:
        model = Interview
        fields = '__all__'    

@admin.register(Interview)
class InterviewAdmin(admin.ModelAdmin):
    form = InterviewAdminForm

现在显示一个带有FilteredSelectMultiple小部件的ModelMultipleChoiceField,我可以用它来选择特定面试的候选人和面试官。

问题是,当我点击保存时,它显示以下错误

Cannot assign "<QuerySet [<Candidate: 11111111(John Doe)>, <Candidate: 22222222(Mary Moe)>]>": "Interview.candidates" must be a "Candidate" instance.

我认为它将我从ModelMultipleChoiceField中选择的所有候选者作为查询集并尝试将其添加到数据库中。

如何指示Django管理员将其添加为2个单独的记录?

编辑:让我的问题更清晰

我正在寻找一种根据我的模型定义自动添加多条记录的简便方法。 另外,如果我的模型定义不符合我想要实现的目标,那么如果你能为我提供正确的模型定义那就太棒了。 希望这不是一两个问题。

0 个答案:

没有答案