【问题标题】:Django save() - prepare_database_save() missing 1 required positional argument: 'field'Django save() - prepare_database_save() 缺少 1 个必需的位置参数:'field'
【发布时间】:2021-01-26 13:48:49
【问题描述】:

这是我在这里的第一个问题,但我会尽力为您提供所有详细信息。 我需要为某个页面创建一个监视列表,用户应该能够将项目“添加”到监视列表。

错误

异常类型:TypeError
异常值:prepare_database_save() 缺少 1 个必需的位置参数:'field'

我不知道为什么,你能告诉我“字段”是什么意思吗,我的代码中什至没有字段的名称。而且我无法将对象保存到我的数据库中。

还有

C:\auctions\views.py,第 46 行,在 watchlist_add
watchlist.save()

模型

class WatchList(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="user")
    auctions = models.ManyToManyField(Auction, related_name="auctions", blank=True)
    
    def __str__(self):
        return f"{self.user}'s watchlist'"

我的网址

urlpatterns = [
    path("", views.index, name="index"),
    path("watchList/<int:auction_id>", views.watchlist_add, name="watchlist_add"),
]

和 Views.py

def getLastPk(obj):
    if(obj.objects.first() is None):
        return 1
    else:
        get_pk = obj.objects.order_by('-pk')[0]
        last_pk = get_pk.pk +1
        return last_pk

def watchlist_add(request, auction_id):
    auction_to_save = Auction.objects.get(pk=auction_id)

    watchlist = WatchList(getLastPk(WatchList),User)
    watchlist.save()
    watchlist.auctions.add(auction_to_save)
    watchlist.save()

    return render(request, "auctions/watchlist.html",{
        "watch_list" : watchlist.auctions.all(),
    })

在 html 中,我通过以下方式调用此函数:

{% if user.is_authenticated %}
     <a href="{% url 'watchlist_add' listing.id %}">Add to Watch List</a>
{% endif %}

listing.id 是当前拍卖的 id

感谢您的帮助:)

完整追溯

Traceback(最近一次调用最后一次):
文件 “C:\env\lib\site-packages\django\core\handlers\exception.py”,第 47 行, 在内部 response = get_response(request)
文件“C:\env\lib\site-packages\django\core\handlers\base.py”,第 179 行,在 _get_response response = Wrapped_callback(request, *callback_args, **callback_kwargs)
文件“C:\env\Scripts\commerce\auctions\views.py”,第 63 行,在 wtadd watchlist.save()
文件“C:\env\lib\site-packages\django\db\models\base.py”,第 753 行,保存中 self.save_base(using=using, force_insert=force_insert,
文件“C:\env\lib\site-packages\django\db\models\base.py”,第 790 行,在 保存基地 更新 = self._save_table(
文件 "C:\env\lib\site-packages\django\db\models\base.py",第 872 行,在 _save_table 更新 = self._do_update(base_qs, using, pk_val, values, update_fields,
文件 “C:\env\lib\site-packages\django\db\models\base.py”,第 926 行,在 _do_update return filters._update(values) > 0
文件“C:\env\lib\site-packages\django\db\models\query.py”,第 803 行,在 _更新 返回 query.get_compiler(self.db).execute_sql(CURSOR)
文件“C:\env\lib\site-packages\django\db\models\sql\compiler.py”,行 1522,在execute_sql中 cursor = super().execute_sql(result_type)
文件“C:\env\lib\site-packages\django\db\models\sql\compiler.py”,行 第1143章 sql, params = self.as_sql()
文件“C:\env\lib\site-packages\django\db\models\sql\compiler.py”,行 第1478章 val.prepare_database_save(字段),
异常类型:/watchList/add 处的 TypeError 异常值: prepare_database_save() 缺少 1 个必需的位置参数: '字段'

【问题讨论】:

    标签: python django django-models save


    【解决方案1】:

    好的,我已经解决了这个问题。我应该将参数传递为 user = request.user 等

    def watchlist_add(request, auction_id):
        if request.user.is_authenticated:
    
            watchlist = WatchList(id = getLastPk(WatchList),user = request.user)
            auction_to_save = Auction.objects.get(id=auction_id)    
            watchlist.save()
            watchlist.auctions.add(auction_to_save)
            watchlist.save()
    
        return render(request, "auctions/watchlist.html",{
            "watch_list" : watchlist.auctions.all(),
        })
    

    【讨论】:

      猜你喜欢
      • 2018-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 2017-10-20
      • 1970-01-01
      • 1970-01-01
      • 2018-04-05
      相关资源
      最近更新 更多