将Foreignkey添加到model_to_dict-Django 1.11

时间:2019-03-11 13:27:11

标签: django python-3.x

我有此方法,它将一个父模型字段保存到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.本质上是<button class="btn btn-secondary add-to-cart" data-button-action="add-to-cart" type="submit" disabled=""> Add to cart </button> ,因为在父模型表单上选择的用户的ID为1,因此,在这种情况下如何传递字段?

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

请将该键TLevelsDraft.team_lead更改为TLevelsDraft.team_lead_id,因为字典从model_to_dict(self)返回

或直接分配与该ID对应的用户实例