Добавление иностранного ключа к model_to_dict - Django 1.11 - PullRequest
0 голосов
/ 11 марта 2019

У меня есть этот метод, который сохраняет поля родительской модели в 2 дочерние модели:

def save(self, *args, **kwargs):
    if not self.pk and self.__class__.__name__ == 'Parent':
        Child1.objects.create(**model_to_dict(self))
        Child2.objects.create(**model_to_dict(self))
    super().save(*args, **kwargs)

Но на Parent модели у меня есть поле вроде:

    team_lead = models.ForeignKey(
    settings.AUTH_USER_MODEL,
    verbose_name=_('decision team lead'),
    on_delete=models.PROTECT,
    null=True, blank=True
)

Всякий раз, когда я пытаюсь спасти родителя, это вызывает у меня следующее:

Traceback (most recent call last):
File "C:\ifavirtualenv\lib\site-packages\django\core\handlers\exception.py", line 41, in inner
response = get_response(request)
File "C:\ifavirtualenv\lib\site-packages\django\core\handlers\base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\ifavirtualenv\lib\site-packages\django\core\handlers\base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\KKOCI\ifa_kkoci\new_ifa\IfA\ifa_standards_rms\apps\tlevels\views.py", line 26, in get_wireframe
form.save()
File "C:\ifavirtualenv\lib\site-packages\django\forms\models.py", line 468, in save
self.instance.save()
File "C:\Users\KKOCI\ifa_kkoci\new_ifa\IfA\ifa_standards_rms\apps\tlevels\models.py", line 176, in save
TLevelsDraft.objects.create(**model_to_dict(self))
File "C:\ifavirtualenv\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\ifavirtualenv\lib\site-packages\django\db\models\query.py", line 392, in create
obj = self.model(**kwargs)
File "C:\ifavirtualenv\lib\site-packages\django\db\models\base.py", line 555, in __init__
_setattr(self, field.name, rel_obj)
File "C:\ifavirtualenv\lib\site-packages\django\db\models\fields\related_descriptors.py", line 216, in __set__
self.field.remote_field.model._meta.object_name,
ValueError: Cannot assign "1": "TLevelsDraft.team_lead" must be a "User" instance.
ERROR:django.request:Internal Server Error: /tlevels/wireframe
Traceback (most recent call last):
File "C:\ifavirtualenv\lib\site-packages\django\core\handlers\exception.py", line 41, in inner
response = get_response(request)
File "C:\ifavirtualenv\lib\site-packages\django\core\handlers\base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\ifavirtualenv\lib\site-packages\django\core\handlers\base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\KKOCI\ifa_kkoci\new_ifa\IfA\ifa_standards_rms\apps\tlevels\views.py", line 26, in get_wireframe
form.save()
File "C:\ifavirtualenv\lib\site-packages\django\forms\models.py", line 468, in save
self.instance.save()
File "C:\Users\KKOCI\ifa_kkoci\new_ifa\IfA\ifa_standards_rms\apps\tlevels\models.py", line 176, in save
TLevelsDraft.objects.create(**model_to_dict(self))
File "C:\ifavirtualenv\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\ifavirtualenv\lib\site-packages\django\db\models\query.py", line 392, in create
obj = self.model(**kwargs)
File "C:\ifavirtualenv\lib\site-packages\django\db\models\base.py", line 555, in __init__
_setattr(self, field.name, rel_obj)
File "C:\ifavirtualenv\lib\site-packages\django\db\models\fields\related_descriptors.py", line 216, in __set__
self.field.remote_field.model._meta.object_name,
ValueError: Cannot assign "1": "TLevelsDraft.team_lead" must be a "User" instance.
"POST /tlevels/wireframe HTTP/1.1" 500 123932

По существу ValueError: Cannot assign "1": "TLevelsDraft.team_lead" must be a "User" instance., конечно, потому что пользователь, выбранный в родительской форме модели, имеет 1 в качестве идентификатора, так как я могу передать поля в этом случае?

Есть идеи?

1 Ответ

1 голос
/ 11 марта 2019

, пожалуйста, измените ключ TLevelsDraft.team_lead на TLevelsDraft.team_lead_id, чтобы этот dict возвратился из model_to_dict(self)

или напрямую назначить пользовательский экземпляр, соответствующий этому идентификатору

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...