Форма не сохраняется на странице администратора Django

#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 перед сохранением.