#python #django
Вопрос:
Я столкнулся с проблемой в своем проекте Django, когда моя форма не сохраняется как новый список в моей модели(список) и даже не отображается на странице администратора Django.
мой models.py :
class listing(models.Model):
title = models.CharField(max_length=64)
describtion = models.CharField(max_length=300)
bid = models.FloatField()
category = models.ForeignKey(categories, default=1, verbose_name="Category",
on_delete=models.SET_DEFAULT)
user = models.ForeignKey(User,default='', verbose_name="User", on_delete=models.SET_DEFAULT)
image = models.CharField(max_length=400)
def __str__(self):
return f"{self.title} "
создайте новую форму листинга :
class create(ModelForm):
class Meta:
model = listing
fields = [ 'title', 'describtion','bid','category','image']
views.py :
def CreateListing(request):
user = request.user
if request.method == "POST":
form = create(request.POST, instance=user)
if form.is_valid():
new_listing = form.save()
new_listing.user = request.user
new_listing.save()
return render(request, "auctions/listing.html")
else:
return render(request, "auctions/Create.html",{
"form": create
})
Ps: У меня нет проблем с моим urls.py
Ответ №1:
Вам необходимо указать пользователя, прежде чем вы сможете сохранить это в базе данных:
def CreateListing(request):
user = request.user
if request.method == "POST":
form = create(request.POST, instance=user)
if form.is_valid():
form.instance.user = user
form.save()
return redirect('%name-of-some-view')
else:
form = create(instance=user)
return render(request, "auctions/Create.html",{
'form': form
})
Примечание.Вы можете ограничить просмотры представлением для пользователей, прошедших проверку подлинности, с
помощью@login_required
декоратора [Django-doc].
Примечание: В случае успешного запроса на публикацию вам следует создать
redirect
[Django-doc] для реализации шаблона публикации/перенаправления/получения [wiki]. Это позволяет избежать того, что вы делаете один и тот же запрос на публикацию, когда пользователь обновляет браузер.
Комментарии:
1. спасибо за ваши отзывы, проблема была устранена путем изменения переменной формы в эту форму
form = create(request.POST, request.FILES)
иform.instance.user = user
перед сохранением.