Я создаю приложение, управляющее процессом собеседования. В одном интервью кандидат может быть опрошен одним или несколькими интервьюерами, а интервьюер может взять интервью у одного или нескольких кандидатов. Это похоже на интервью «круглого стола». Упрощенная версия моделей:
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 для модели Интервью добавление записи для интервью означало бы, что мне нужно будет создать запись для каждого кандидата и интервьюера. Этот процесс обременителен, если есть много кандидатов и / или интервьюеров. Я хотел бы добавить всех кандидатов и интервьюеров для конкретного интервью.
Я изменил свою модель, чтобы использовать форму ModelMultipleChoiceField вместо используемой по умолчанию SelectField для Django для внешних ключей.
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
Теперь отображается ModelMultipleChoiceField с виджетом FilteredSelectMultiple, который я могу использовать для выбора кандидатов и интервьюеров для конкретного интервью.
Проблема в том, что когда я нажимаю сохранить, отображается следующая ошибка
Cannot assign "<QuerySet [<Candidate: 11111111(John Doe)>, <Candidate: 22222222(Mary Moe)>]>": "Interview.candidates" must be a "Candidate" instance.
Я считаю, что он получает всех кандидатов, выбранных мной из ModelMultipleChoiceField в качестве набора запросов, и пытается добавить его в базу данных.
Как я могу поручить администратору Django добавить его как 2 отдельные записи?
Редактировать: Чтобы прояснить мой вопрос
Я ищу краткий способ автоматического добавления нескольких записей в соответствии с определением моей модели.
Кроме того, если мое определение модели не соответствует тому, чего я хотел бы достичь, было бы здорово, если бы вы предоставили мне правильное определение модели.
Надеюсь, это не задаст два вопроса в одном.