Size: a a a

Django [ru] #STAY HOME

2020 February 10

ВЗ

Владимир Злобин in Django [ru] #STAY HOME
Artem Gubatenko
а как выводишь?
<div class="form-group">
           <div class="col-7">
               {{ news_form.title.label_tag }}
               {{ news_form.title }}

               {% if news_form.title.errors %}
               <div class="alert alert-danger mt-1">
                   {{ news_form.title.errors }}
               </div>
               {% endif %}
           </div>
       </div>
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
Владимир Злобин
<div class="form-group">
           <div class="col-7">
               {{ news_form.title.label_tag }}
               {{ news_form.title }}

               {% if news_form.title.errors %}
               <div class="alert alert-danger mt-1">
                   {{ news_form.title.errors }}
               </div>
               {% endif %}
           </div>
       </div>
выложи код вьюхи, html формы и джанго-формы куда-нибудь, и скинь ссылкой.
Из этих кусков особо не понятно
источник

ВЗ

Владимир Злобин in Django [ru] #STAY HOME
Artem Gubatenko
выложи код вьюхи, html формы и джанго-формы куда-нибудь, и скинь ссылкой.
Из этих кусков особо не понятно
def news_update(request, id):

   news = get_object_or_404(News, id=id)
   user = User.objects.get(id=request.user.id)
   club = get_object_or_404(Club, user_id=user.id)
   club_city = ClubCity.objects.filter(club=news.club)

   if request.method == "POST":
       news_form = NewsForm(request.POST, instance=news)
       if news_form.is_valid():
           news = news_form.save(commit=False)
           news.slug = generate_slug(news_form.cleaned_data['title'], 60)
           news.city_id = int(request.POST.get('city_id'))
           news.save()
           return redirect(reverse('admin_news'))
       else:
           pprint(news_form.errors)
   else:
       news_form = NewsForm(instance=news)
       return render(request, "adminka/news/update.html", locals())
источник

PZ

Pavel Zagrebelin in Django [ru] #STAY HOME
        else:
           pprint(news_form.errors)

у тебя вот эта ветка кода ничего не возаращяет, добавь сюда return render(...
источник

PZ

Pavel Zagrebelin in Django [ru] #STAY HOME
Владимир Злобин
The view adminka.views.news_update didn't return an HttpResponse object. It returned None instead.
(об этом кстати в эксепшене написано, "The view adminka.views.news_update didn't return an HttpResponse object. It returned None instead.")
источник

ВЗ

Владимир Злобин in Django [ru] #STAY HOME
Pavel Zagrebelin
(об этом кстати в эксепшене написано, "The view adminka.views.news_update didn't return an HttpResponse object. It returned None instead.")
return render(request, "adminka/news/update.html", locals()) - добавил и все норм, но при создании новости такого не было
источник

PZ

Pavel Zagrebelin in Django [ru] #STAY HOME
Владимир Злобин
return render(request, "adminka/news/update.html", locals()) - добавил и все норм, но при создании новости такого не было
сюда попадает, если форма не валидна. ты проверял создание новости при невалидной форме?
источник

PZ

Pavel Zagrebelin in Django [ru] #STAY HOME
а, у тебя создание вообще в другом месте идёт.
источник

ВЗ

Владимир Злобин in Django [ru] #STAY HOME
да, там где пользовательский функционал
источник

ВЗ

Владимир Злобин in Django [ru] #STAY HOME
при невалидной форме все отображается в html
источник

ВЗ

Владимир Злобин in Django [ru] #STAY HOME
def create(request):
   user = User.objects.get(id=request.user.id)
   club = get_object_or_404(Club, user_id=user.id)
   club_city = ClubCity.objects.filter(club=club)
   if request.method == 'POST':
       news_form = NewsForm(request.POST)
       news_main_image_form = NewsMainImageForm(request.POST, request.FILES)
       news_other_image_form = NewsOtherImageForm(request.POST, request.FILES)

       if news_form.is_valid() and news_main_image_form.is_valid() and news_other_image_form.is_valid():
           city = City.objects.get(id=int(request.POST.get('city_id')))
           news = news_form.save(commit=False)
           news.slug = generate_slug(news_form.cleaned_data['title'], 60)
           news.city_id = city.id
           news.club_id = club.id
           news.save()
           # сохраняем главное изображения
           news_main_image = news_main_image_form.save(commit=False)
           news_main_image.news_id = news.id
           news_main_image.save()
           # сохраняем дополнительные изображения
           for f in request.FILES.getlist('image_path'):
               NewsOtherImage.objects.create(news=news, image_path=f)

           return redirect('news_view', news.slug)

   else:
       news_form = NewsForm()
       news_main_image_form = NewsMainImageForm()
       news_other_image_form = NewsOtherImageForm()

   return render(request, 'news/create.html', locals())
источник

PZ

Pavel Zagrebelin in Django [ru] #STAY HOME
Владимир Злобин
def create(request):
   user = User.objects.get(id=request.user.id)
   club = get_object_or_404(Club, user_id=user.id)
   club_city = ClubCity.objects.filter(club=club)
   if request.method == 'POST':
       news_form = NewsForm(request.POST)
       news_main_image_form = NewsMainImageForm(request.POST, request.FILES)
       news_other_image_form = NewsOtherImageForm(request.POST, request.FILES)

       if news_form.is_valid() and news_main_image_form.is_valid() and news_other_image_form.is_valid():
           city = City.objects.get(id=int(request.POST.get('city_id')))
           news = news_form.save(commit=False)
           news.slug = generate_slug(news_form.cleaned_data['title'], 60)
           news.city_id = city.id
           news.club_id = club.id
           news.save()
           # сохраняем главное изображения
           news_main_image = news_main_image_form.save(commit=False)
           news_main_image.news_id = news.id
           news_main_image.save()
           # сохраняем дополнительные изображения
           for f in request.FILES.getlist('image_path'):
               NewsOtherImage.objects.create(news=news, image_path=f)

           return redirect('news_view', news.slug)

   else:
       news_form = NewsForm()
       news_main_image_form = NewsMainImageForm()
       news_other_image_form = NewsOtherImageForm()

   return render(request, 'news/create.html', locals())
- возьми обе свои вьюшки
- всё, кроме строк с if\else и return, замени на одну строку ...
- найди разницу
источник

ВЗ

Владимир Злобин in Django [ru] #STAY HOME
Pavel Zagrebelin
- возьми обе свои вьюшки
- всё, кроме строк с if\else и return, замени на одну строку ...
- найди разницу
в любом случае спасибо
источник

PZ

Pavel Zagrebelin in Django [ru] #STAY HOME
Владимир Злобин
в любом случае спасибо
это значит "я не буду делать предложенную тобой ерунду"?
источник

ВЗ

Владимир Злобин in Django [ru] #STAY HOME
Pavel Zagrebelin
это значит "я не буду делать предложенную тобой ерунду"?
я уже сравнил код, но там else в create нету и все корректно работает
источник

PZ

Pavel Zagrebelin in Django [ru] #STAY HOME
Владимир Злобин
я уже сравнил код, но там else в create нету и все корректно работает
Нет.
Ещё в методе create в самом конце стоит retirn render, в который ты проваливаешься при невалидной форме.
В update есть специальный else для такого случая, но в этом else ты ничего не возвращаешь, и в конце метода тоже нет ничего.
источник

ВЗ

Владимир Злобин in Django [ru] #STAY HOME
Pavel Zagrebelin
Нет.
Ещё в методе create в самом конце стоит retirn render, в который ты проваливаешься при невалидной форме.
В update есть специальный else для такого случая, но в этом else ты ничего не возвращаешь, и в конце метода тоже нет ничего.
там только один return render(request, 'news/create.html', locals()) если не пришел request.POST
источник

PZ

Pavel Zagrebelin in Django [ru] #STAY HOME
помню времена, когда учить программирование начинали с ромбиков, прямоугольников и стрелочек на листочке бумажки, вот там всё видно было, когда какое условие выполняется.
источник

PZ

Pavel Zagrebelin in Django [ru] #STAY HOME
Владимир Злобин
там только один return render(request, 'news/create.html', locals()) если не пришел request.POST
А если форма создания не валидна, какие строки твоей процедуры будут выполнены?
источник

PZ

Pavel Zagrebelin in Django [ru] #STAY HOME
подскажу чуток:
def create(request):
   ...
   if request.method == 'POST':
       ...
       if news_form.is_valid():
           ...        
           return redirect('news_view', news.slug)
   else:
       ...
   return render(request, 'news/create.html', locals())
источник