Django: Множественные входы с внешним ключом

Я хотел добавить больше пользователей для смены. Но это внешний ключ. Как мне это сделать? Он добавляет, но если я выбираю более одного пользователя, он показывает следующее.

Поле 'id' ожидало число, но получило ['1', '2']

Нужно ли мне преобразовать его в строку? Я не знаю, как это сделать. Ниже приведен мой код.

models.py

class User(models.Model):
    user_name = models.CharField(max_length=32, unique=True)
    pass_word = models.CharField(max_length=150,)
    email = models.EmailField(blank=True, unique=True)
    phone = models.CharField(max_length=32, unique=True)
    is_active = models.BooleanField(default=True,)

class Attendance(models.Model):
    RosteringUserDate = models.ForeignKey(RosteringUserDate, on_delete=models.CASCADE, null=True)
    date = models.DateField()
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    begin_time = models.TimeField(default="")
    end_time = models.TimeField(default="")
    work_time = models.CharField(max_length=64, default='')

views.py

def shift_add(request):
    queryset = User.objects.all()
    if request.method == 'GET':
        return render(request, 'attendance/shift_add.html', {'queryset': queryset})
    if request.method == "POST":   
        Attendance.objects.create(
            user_id = request.POST.getlist('user_name',[]),
            date = request.POST.get('date'),
            RosteringUserDate_id = request.POST.get('RosteringUserDate_id'),
            begin_time = request.POST.get('begin_time'),
            end_time = request.POST.get('end_time'),
            work_time = request.POST.get('work_time'),
        )
        return redirect('/user/attendance/')

forms.py

<form method="post"  action="/user/attendance_administrators/shift/add/">
    <div class="form-group">
         <input type="text" name="name" class="form-control" required>
    </div>
    <div class="form-group">
         <input type="date" name="date" class="form-control" required>
    </div>
    <div class="form-group">
         <input type="text" name="RosteringUserDate_id" class="form-control" required>
    </div>
    <div class="form-group">
         <input type="time" name="begin_time" class="form-control" required>
    </div>
    <div class="form-group">
         <input type="time" name="end_time" class="form-control" required>
    </div>
    <div class="form-group">
         <input type="text" name="work_time" class="form-control" required>
    </div>
    <div class="form-group">
         <select name="user_name" class="form-control" required multiple>
                 {% for query in queryset%}
                 {% if query in queryset.all %}
                 <option selected value="{{ query.id }}"> {{ query.user_name }} </option>
                 {% else %}
                  <option value="{{ query.id }}"> {{ query.user_name }} </option>
                 {% endif %}
                 {% endfor %}
         </select>
    </div>
    <div align="center">
          <input type="submit" value="Submit" class="btn btn-primary" >
          <input type="reset" value="Reset" class="btn btn-primary" >
    </div>
</form>

Когда вы используете ForeignKey, это означает, что вы можете добавить несколько записей в таблицу с одинаковым полем ForeignKey id но только одну в тех же записях, поэтому одно из решений, которое вы можете использовать bulk_create

Правильным способом для решения такого рода задач является использование поля ManyToMany.

Пример:

user = models.ManyToManyField(User)

Эта демонстрация поможет вам легко разобраться.

Вернуться на верх