7emsk
(Adil)
07.Апрель.2020 16:44:24
#1
Здравствуйте))
Вот начал изучать Django Python и возникла ошибка((
Перенаправил ссылку на файл HTML предворительно создав его, затем прописал ссылку в самом главном файле index , перешел на сайт появилась ссылка добавить собственно что мне и надо, но после того как я нажал на нее у меня появляется окошко ImproperlyConfigured at /add/
BbCreateView is missing a QuerySet. Define BbCreateView.model, BbCreateView.queryset, or override BbCreateView.get_queryset(). Как мне исправить это ??? Самое странное что ошибок вообще не выдает(
Буду благодарен всем за помощь))
Все остольное скину в ЛС так как на сайте стоят ограничения новым пользователям, и за это тоже буду вам блaгодарен
Собственно вот сама ошибка при нажатии на ссылку Добавить
**Это файл views.py**
from django.http import HttpResponse
from django.template import loader
from django.shortcuts import render
from django.views.generic.edit import CreateView
from django.urls import reverse_lazy
from .forms import BbForm
from .models import Rubric
from .models import Bb
class BbCreateView(CreateView):
template_name = 'sat1/create.html'
from_class = BbForm
success_url = reverse_lazy('index')
def get_context_data(self, **kwargs):
context = super() .get_context_data (**kwargs)
context['rubrics'] = Rubric.objects.all()
return context
def index(request):
s = 'Список объявлений\r\n\r\n\r\n'
for bb in Bb.objects.order_by('-published'):
s += bb.title + '\r\n' + bb.content + '\r\n\r\n'
bbs = Bb.objects.all()
rubrics = Rubric.objects.all()
context = {'bbs': bbs, 'rubrics': rubrics}
return render(request, 'sat1/index.html', context)
def by_rubric(request, rubric_id):
bbs = Bb.objects.filter(rubric=rubric_id)
rubrics = Rubric.objects.all()
current_rubrics = Rubric.objects.get(pk=rubric_id)
context = {'bbs': bbs, 'rubrics': rubrics, 'current_rubric': current_rubrics}
return render(request, 'sat1/by_rubric.html', context)
**Это файл index.py**
{% extends "layout/basic.html" %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Главная - Доска объявлений</title>
</head>
<body>
<h1>Объявления</h1>
<div>
<a href="{% url 'index' %}">Главная</a>
<a href="{% url 'add' %}">Добавить</a>
{% for rubric in rubrics %}
<a href="{% url 'by_rubric' rubric.pk %}">{{ rubric.name }}</a>
{% endfor %}
</div>
{% block content %}
{% for bb in bbs %}
<div class="b">
<h2>{{ bb.title }}</h2>
<p>{{ bb.content }}</p>
<p><a href="/sat1/ {{ bb.rubric.pk }}/"> {{ bb.rubric.name }}</a></p>
<p>{{ bb.published|date:"d.m.Y H:i:s" }}</p>
</div>
{% endfor %}
{% endblock %}
</body>
</html>
**Это файл urls.py в файле самого проекта**
from django.urls import path
from .views import index, by_rubric, BbCreateView
urlpatterns = (
path('add/', BbCreateView.as_view(), name='add'),
path('<int:rubic_id>/', by_rubric, name='by_rubric'),
path('', index, name='index'),
)
AlexP
(Alex P.)
07.Апрель.2020 17:17:47
#2
на этом форуме?
Можно просто загрузить архив на яндекс.диск, гугл.драйв и т.п. и дать ссылку.
так а это что?)
А в BbCreateView что? Откуда он?
ЗЫ код лучше выкладывать не скринами, а кнопкой Код. FAQ по функциональности форума
7emsk
(Adil)
07.Апрель.2020 17:35:22
#4
Я исправил теперь весь код доступен к просмотру )
AlexP
(Alex P.)
07.Апрель.2020 17:44:03
#5
Я с Джанго давно не сталкивался, как вариант исправления гугл предлагает установить свойство model
.
class BbCreateView(CreateView):
model = Bb
..........
7emsk
(Adil)
07.Апрель.2020 17:54:36
#6
К большому сожелению это не исправило мою ошибку (
AlexP
(Alex P.)
07.Апрель.2020 18:21:28
#7
Судя по примерам и документации еще надо fields
указать. Хотя может это другая ошибка была бы.
https://riptutorial.com/django/example/11709/django-class-based-views--example-of-createview
https://docs.djangoproject.com/en/3.0/ref/class-based-views/mixins-editing/#django.views.generic.edit.ModelFormMixin.fields
A list of names of fields. This is interpreted the same way as the Meta.fields
attribute of ModelForm
.
This is a required attribute if you are generating the form class automatically (e.g. using model
). Omitting this attribute will result in an ImproperlyConfigured
exception.
7emsk
(Adil)
08.Апрель.2020 07:07:50
#8
Я прописал models.py файл еще до обращения на этот форум)
from django.db import models
class Bb(models.Model):
title = models.CharField(max_length=50)
content = models.TextField(null=True, blank=True, verbose_name='Описание')
price = models.FloatField(null=True, blank=True, verbose_name='Цена')
published = models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='Опубликовано')
rubric = models.ForeignKey('Rubric', null=True, on_delete=models.PROTECT, verbose_name='Рубрика')
class Meta:
verbose_name_plural = 'Обьявления'
verbose_name = 'Объявление'
ordering = ['-published']
class Rubric(models.Model):
name = models.CharField(max_length=20, db_index=True, verbose_name='Название')
def _str_(self):
return self.name
class Meta:
verbose_name_plural='Рубрики'
verbose_name = 'Рубрику'
ordering = ['name']
AlexP
(Alex P.)
08.Апрель.2020 07:09:56
#9
Так а это причем? fields
в BbCreateView надо.
7emsk
(Adil)
08.Апрель.2020 10:35:17
#10
Нечего не выходит, попробую просто все заного переделать может поможет
7emsk
(Adil)
08.Апрель.2020 17:23:49
#11
Вот нашел ошибку
Ошибка это последняя строка return, вот удалю ее и все ок заходит на страницу, но там нету формы заполнения а после добавить опять ошибка
Теперь не знаю как ее исправить, твоя помощь мне бы не помешала ))
def get_form(self, form_class=None):
"""Return an instance of the form to be used in this view."""
if form_class is None:
form_class = self.get_form_class()
return form_class (**self.get_form_kwargs())
AlexP
(Alex P.)
08.Апрель.2020 17:48:01
#12
get_form вроде вообще не нужен в простых случаях.
И в коде выше его не было.
Покажите весь текущий код BbCreateView.
7emsk
(Adil)
08.Апрель.2020 17:49:31
#13
from django.http import HttpResponse
from django.template import loader
from django.shortcuts import render
from django.views.generic.edit import CreateView
from .forms import BbForm
from .models import Bb
from .models import Rubric
def index (request):
template = loader.get_template('Spam/index.html')
bbs = Bb.objects.all()
rubrics = Rubric.objects.all()
context = {'bbs' : bbs, 'rubrics' : rubrics}
return render(request, 'Spam/index.html', context)
s = 'Список объявлений\r\n\r\n\r\n'
for bb in Bb.objects.order_by('-published'):
s += bb.title + '\r\n' + bb.content + '\r\n\r\n'
return HttpResponse(template.render(context, request))
def by_rubric(request, rubric_id):
bbs = Bb.objects.filter(rubric=rubric_id)
rubrics = Rubric.objects.all()
current_rubric = Rubric.objects.get (pk=rubric_id)
context = {'bbs' : bbs, 'rubrics' : rubrics, 'current_rubric' : current_rubric}
return render(request, 'Spam/by_rubric.html', context)
class BbCreateView(CreateView):
template_name = 'Spam/create.html'
form_class = BbForm
success_url = '/Spam/'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['rubrics'] = Rubric.objects.all()
return context
7emsk
(Adil)
08.Апрель.2020 17:59:47
#15
Извиняюсь за тупость, а что в нем прописать ?
AlexP
(Alex P.)
08.Апрель.2020 18:10:03
#16
поля модели, которые надо вводить.
ну и + это:
7emsk
(Adil)
08.Апрель.2020 19:00:03
#17
Не помогло
Ошибка конкретно в этом, мне сам Django на нее указал
Т.е я ее удаляю и выходит сайт
return form_class(**self.get_form_kwargs())
AlexP
(Alex P.)
08.Апрель.2020 19:26:08
#18
В вашем коде выше нет get_form.
И я ж говорю
7emsk
(Adil)
08.Апрель.2020 19:27:53
#19
А что тогда мне делать (( Забрасывать на долгий ящик не хочу
AlexP
(Alex P.)
08.Апрель.2020 19:50:39
#20
Так где (и зачем) у вас get_form-то?
7emsk:
А что тогда мне делать
Сделайте просто по базовому примеру для начала без всего лишнего.
from django.db import models
class Bb(models.Model):
title = models.CharField(max_length=50)
content = models.TextField(null=True, blank=True, verbose_name='Описание')
price = models.FloatField(null=True, blank=True, verbose_name='Цена')
from django.views.generic.edit import CreateView
from .models import Bb
class BbCreateView(CreateView):
model = Bb
fields = ('title', 'content', 'price')
from django.urls import path
from .views import index, BbCreateView
urlpatterns = (
path('add/', BbCreateView.as_view(), name='add'),
path('', index, name='index'),
)