Доброго времени суток. Прошу заранее "понять и простить", если вопрос покажется глупым для опытных программистов. Впервые за долгое время прибегаю к просьбе сообщества. Перегуглил и перечитал множество информации. В том числе и:
Как написать CreateView для модели с ForeignKey? - описанные тут решения, тоже почему то не помогли.
У меня есть следующие модели:
models.py
class ToDoList(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class ToDoItem(models.Model):
list = models.ForeignKey(ToDoList, on_delete=models.CASCADE)
text = models.CharField(max_length=200)
def __str__(self):
return self.text
Есть форма:
forms.py
class List(ModelForm):
class Meta:
model = ToDoList
fields = ['user', 'name']
Желательно, чтобы поле user, автоматически заполнялось данными авторизированного пользователя. Знаю, что его, в таком случае, не надо указывать в переменной fields, но и в приведенном мной примере, данные все равно не сохраняются.
Так выглядит файл urls.py
app_name = 'main'
urlpatterns = [
re_path('^$', views.AllListView.as_view(), name='list'),
re_path('^(?P<pk>\d+)/$', views.ListDetailView.as_view(), name='detail'),
re_path('^new_list/$', views.ListCreateView.as_view(), name='new'),
]
Вот собственно views.py
class AllListView(ListView):
context_object_name = 'todolists'
model = ToDoList
template_name = 'todo/list.html'
def get_queryset(self):
user = self.request.user
result = ToDoList.objects.filter(user=user)
return result
class ListDetailView(DetailView):
context_object_name = 'todolist_detail'
model = ToDoList
template_name = 'todo/list_items.html'
class ListCreateView(CreateView):
form_class = List
template_name = 'todo/list_new.html'
success_url = 'list'
Это простейшее, надоевшее всем, приложение аля ToDo, как вы уже могли понять. До этого я его реализовал через функциональные представления без проблем, теперь решил сделать с помощью CBV.
Логика следующая: пользователь авторизовался, перешел на страницу списков, создал списки задач(у себя для отображения я их создал через админку), далее в список добавил задачи и т.д.
С ListView и DetailView проблем нет.
На основной странице отображается список листов. Там кнопка "New list" по ней я перехожу на CreateView. Ввожу данные для полей и не происходит ровным счетом ничего. Джанго ни на что не жалуется, об ошибках не сообщает. Не редиректа, не сохраненной в БД записи.
Вот html код на всякий случай, html код detailview соответственно не размещаю.
list.html
{% extends 'second_base.html' %}
{% block content %}
<div class='container'>
<div class='col-6'>
<h1>Ваш список листов:</h1>
<div class='row mt-4'>
<ul class="list-group">
{% for todolist in todolists %}
<li class="list-group-item"><a href="{{ todolist.id }}">{{ todolist.name }}</a></li>
{% endfor %}
</ul>
</div>
<a href="{% url 'main:new' %}">New list</a>
</div>
</div>
{% endblock %}
list_new.html
{% extends 'second_base.html' %}
{% block content %}
<form class="POST">
{% csrf_token %}
{{ form.as_p }}
<input type='submit' class='btn btn-primary' value='Submit'>
</form>
{% endblock %}
Все подробно расписал, чтоб уберечь себя и вас от уточнений. Очень прошу помочь. Заранее спасибо.