Я пытаюсь создать базовый список заданий / заданий. В форме «Создание работы» я пытаюсь добавить возможность «автору» назначать дополнительный персонал для работы через поле множественного выбора из списка зарегистрированных пользователей.
Пока, похоже, работает через форму администратора. Но когда я делаю то же самое на «странице создания задания», я получаю следующую ошибку ValueError:
Невозможно назначить «QuerySet [CustomUser: testuser1, CustomUser: testuser2]»: «Job.personnel» должен быть экземпляром «CustomUser».
Я не уверен, что я делаю неправильно в представлении, я видел похожие темы, но эти варианты либо не работали, либо я просто не понимал решение (я очень плохо знаком с Django / Python в целом).
Буду очень признателен за любую помощь или предложения о том, как это можно улучшить!
Модель работы из приложения для работы
from django.conf import settings
from django.db import models
from user.models import CustomUser
class Job(models.Model):
"""A model for active jobs"""
job_title = models.CharField(max_length=200)
author = models.ForeignKey(
CustomUser,
null=True,
on_delete=models.SET_NULL,
related_name = 'authors'
)
personnel = models.ForeignKey(
CustomUser,
null=True,
on_delete=models.SET_NULL,
related_name = 'addition_personnel'
)
job_text = models.TextField()
created_date = models.DateTimeField(auto_now_add=True)
last_update = models.DateTimeField(null=True, auto_now=True)
close_date = models.DateField(null=True, blank=True)
# Job status choices
OPEN = 'Open'
CLOSED = 'Closed'
JOB_STATUS_CHOICES = (
(OPEN, 'Open'),
(CLOSED, 'Closed')
)
job_status = models.CharField(
choices = JOB_STATUS_CHOICES,
max_length = 10,
null = True,
blank = True,
default = ''
)
def __str__(self):
return self.job_title
Модель CustomUser из пользовательского приложения
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
""" custom user model """
Position = models.CharField(max_length=100, null='', blank = True)
Форма - использует ModelForm с ModelMultipleChoiceField
from django import forms
from .models import Job
from user.models import CustomUser
class JobCreateForm(forms.ModelForm):
"""Create new job form"""
personnel_queryset = CustomUser.objects.all()
personnel = forms.ModelMultipleChoiceField(
queryset=personnel_queryset,
widget=forms.CheckboxSelectMultiple(),
required=False
)
class Meta:
model = Job
fields = [
'job_title',
'job_text',
'close_date',
'job_status',
'personnel'
]
и фрагмент просмотра
def job_create(request):
"""Job create form view"""
if request.method == 'POST':
form = JobCreateForm(request.POST)
personnel = CustomUser.objects.all()
if form.is_valid():
new_job = form.save(commit=False)
new_job.author = request.user
new_job.personnel = personnel
new_job.save()
return redirect('job_detail',
job_details_id=new_job.pk)
# if a GET (or any other mehtod) blank form is created
else:
form = JobCreateForm()
return render(request, 'jobs/job_create.html', {'form':form})