Django save() — prepare_database_save() отсутствует 1 требуемый позиционный аргумент: ‘поле’

#python #django #django-models #save

#python #django #django-модели #Сохранить

Вопрос:

Это мой первый вопрос здесь, но я постараюсь изо всех сил предоставить вам все подробности. Мне нужно создать список наблюдения для некоторой страницы, пользователь должен иметь возможность «добавить» элемент в список наблюдения.

ОШИБКА

Тип исключения: ошибка типа
Значение исключения: prepare_database_save() отсутствует 1 требуемый позиционный аргумент: ‘поле’

Я понятия не имею, почему, можете ли вы сказать мне, что означает ‘field’, у меня даже нет этого имени поля в моем коде. И я не могу сохранить объект в своей базе данных.

А также

C:auctionsviews.py , строка 46, в watchlist_add список
наблюдения.сохранить()

Модели

 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'"
  

Мои URL-адреса

 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 является идентификатором текущего аукциона

Спасибо за любую помощь 🙂

Полная трассировка

Обратная трассировка (последний последний вызов):
файл «C:envlibsite-packagesdjangocorehandlersexception.py «, строка 47, во внутреннем ответе = get_response(запрос)
Файл «C:envlibsite-packagesdjangocorehandlersbase.py «, строка 179, в файле _get_response response = wrapped_callback(запрос, *callback_args, **callback_kwargs)
«C:envScriptscommerceauctionsviews.py «, строка 63, в файле wtadd watchlist.save()
«C:envlibsite-packagesdjangodbmodelsbase.py «, строка 753, в save self.save_base(использование=использование, force_insert=force_insert,
Файл «C:envlibsite-packagesdjangodbmodelsbase.py «, строка 790, в базе сохранений обновлено = self._save_table(
файл «C:envlibsite-packagesdjangodbmodelsbase.py «, строка 872, в _save_table обновлено = self._do_update(base_qs, использование, pk_val, значения, update_fields,
Файл «C:envlibsite-packagesdjangodbmodelsbase.py «, строка 926, в _do_update возвращает filtered._update(значения) >0
файлов «C:envlibsite-packagesdjangodbmodelsquery.py «, строка 803, в _update возвращает запрос.get_compiler(self.db).execute_sql(КУРСОР)
файл «C:envlibsite-packagesdjangodbmodelssqlcompiler .py», строка 1522, в файле execute_sql cursor = super().execute_sql(result_type)
«C:envlibsite-packagesdjangodbmodelssqlcompiler.py «, строка 1143, в файле execute_sql sql, параметры = self.as_sql()
«C:envlibsite-packagesdjangodbmodelssqlcompiler.py «, строка 1478, в as_sql val.prepare_database_save(поле),
Тип исключения: ошибка типа в /Список наблюдения / добавить значение исключения: prepare_database_save() отсутствует 1 требуемый позиционный аргумент: ‘поле’

Ответ №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(),
    })