#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(),
})