Как добавить объекты пользователя во многие поля? - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь добавить текущего пользователя в поле m2m в моей модели:

class(models.Model):
    name = m.cfield(...)
    admin = m.m2m(User, related_name="admin+",...)
    members = m.m2m(User, related_name="members+",...)
    creator = m.FKEY(User, related_name="creator+",...)

Пока я пытаюсь создать объект, используя следующие представления:

if request.method == "POST":
        user = User.objects.get(id=request.user.id)
        clss = Class()
        clss.creator = user
        clss.admin.add(user)
        clss.members.add(user)
        clss.save()
        return redirect('...')

Я брошен с FOREIGN KEY constraint failed ошибкой. След:

Traceback (most recent call last):
  File "C:\Users\mowli\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\backends\base\base.py", line 243, in _commit
    return self.connection.commit()
sqlite3.IntegrityError: FOREIGN KEY constraint failed

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\mowli\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\mowli\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\mowli\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\mowli\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\auth\decorators.py", line 21, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "C:\Users\mowli\Desktop\Projects\gcepac\app\views.py", line 49, in new_classroom
    clss.admin.add(user)
  File "C:\Users\mowli\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\models\fields\related_descriptors.py", line 951, in add
    self._add_items(
  File "C:\Users\mowli\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\transaction.py", line 232, in __exit__
    connection.commit()
  File "C:\Users\mowli\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\utils\asyncio.py", line 26, in inner
    return func(*args, **kwargs)
  File "C:\Users\mowli\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\backends\base\base.py", line 267, in commit
    self._commit()
  File "C:\Users\mowli\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\backends\base\base.py", line 243, in _commit
    return self.connection.commit()
  File "C:\Users\mowli\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\utils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "C:\Users\mowli\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\backends\base\base.py", line 243, in _commit
    return self.connection.commit()
django.db.utils.IntegrityError: FOREIGN KEY constraint failed

Любая помощь?

1 Ответ

0 голосов
/ 19 апреля 2020

Здесь возникает ошибка FOREIGN KEY constraint failed, потому что для множества полей оба объекта должны быть сохранены в БД до того, как их связать. При попытке сохранить, используя clss.admin.add(user), экземпляр пользователя уже находится в БД, но не текущий экземпляр таблицы class.

Так что это сработало!

if request.method == "POST":
        user = User.objects.get(id=request.user.id)
        clss = Class()
        clss.creator = user
        clss.save()
        clss.admin.add(user)
        clss.members.add(user)
        clss.save()
        return redirect('...')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...