微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在没有直通表的情况下保存 django manytomany 字段

如何解决如何在没有直通表的情况下保存 django manytomany 字段

我面临着无法摆脱的恶性循环;

假设我有以下模型:

class AgregatorProductCoupon(models.Model):
    AgregatorProductId = models.ManyToManyField(Product,related_name="coupons",db_column='AgregatorProductId',verbose_name=_("Agregator Product Id"))

    class Meta:
        managed = True
        db_table = 'AgregatorProductCoupon'

当我尝试保存一个实例时,我收到一个完整性错误说明

"<AgregatorProductCoupon: AgregatorProductCoupon object (None)>" needs to have a value for field "id" before this many-to-many relationship can be used.

但是当我尝试在没有 m2m rel 的情况下进行保存时,我显然会收到一个缺少必填字段的错误

Cannot insert the value NULL into column 'AgregatorProductId',table 'test_dbo.dbo.AgregatorProductCoupon'; column does not allow nulls. INSERT fails.

我无法重新设计表格,因为它们也绑定到其他地方。 怎么办? 任何帮助将不胜感激。

编辑:追溯:

[2021-01-07 13:19:28,040] log_response - Internal Server Error: /admin/agregator/agregatorcoupons/78/change/
Traceback (most recent call last):
  File "C:\David\.venv\lib\site-packages\django\core\handlers\exception.py",line 34,in inner
    response = get_response(request)
  File "C:\David\.venv\lib\site-packages\django\core\handlers\base.py",line 126,in _get_response
    response = self.process_exception_by_middleware(e,request)
  File "C:\David\.venv\lib\site-packages\django\core\handlers\base.py",line 124,in _get_response
    response = wrapped_callback(request,*callback_args,**callback_kwargs)
  File "C:\David\.venv\lib\site-packages\django\contrib\admin\options.py",line 607,in wrapper
    return self.admin_site.admin_view(view)(*args,**kwargs)
  File "C:\David\.venv\lib\site-packages\django\utils\decorators.py",line 142,in _wrapped_view
    response = view_func(request,*args,**kwargs)
  File "C:\David\.venv\lib\site-packages\django\views\decorators\cache.py",line 44,in _wrapped_view_func
    response = view_func(request,**kwargs)
  File "C:\David\.venv\lib\site-packages\django\contrib\admin\sites.py",line 223,in inner
    return view(request,**kwargs)
  File "C:\David\.venv\lib\site-packages\django\contrib\admin\options.py",line 1650,in change_view
    return self.changeform_view(request,object_id,form_url,extra_context)
  File "C:\David\.venv\lib\site-packages\django\utils\decorators.py",line 45,in _wrapper
    return bound_method(*args,line 1536,in changeform_view
    return self._changeform_view(request,extra_context)
  File "C:\David\.venv\lib\site-packages\django\contrib\admin\options.py",line 1576,in _changeform_view
    self.save_related(request,form,formsets,not add)
  File "C:\David\.venv\lib\site-packages\django\contrib\admin\options.py",line 1122,in save_related
    self.save_formset(request,formset,change=change)
  File "C:\David\.venv\lib\site-packages\django\contrib\admin\options.py",line 1110,in save_formset
    formset.save()
  File "C:\David\.venv\lib\site-packages\django\forms\models.py",line 669,in save
    return self.save_existing_objects(commit) + self.save_new_objects(commit)
  File "C:\David\.venv\lib\site-packages\django\forms\models.py",line 803,in save_new_objects
    self.new_objects.append(self.save_new(form,commit=commit))
  File "C:\David\.venv\lib\site-packages\django\forms\models.py",line 949,in save_new
    obj.save()
  File "C:\David\agregator\models.py",line 2745,in save
    print(self.AgregatorProductId)
  File "C:\David\.venv\lib\site-packages\django\db\models\fields\related_descriptors.py",line 526,in __get__
    return self.related_manager_cls(instance)
  File "C:\David\.venv\lib\site-packages\django\db\models\fields\related_descriptors.py",line 821,in __init__
    raise ValueError('"%r" needs to have a value for field "%s" before '
ValueError: "<AgregatorProductCoupon: AgregatorProductCoupon object (None)>" needs to have a value for field "id" before this many-to-many relationship can be used.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。