У меня есть модель List
, связанная с ForeignKey
с моделью пользователя.
Я использую класс FormView
, чтобы показать эту форму в шаблоне, помимо отправки переменного контекста listas
, то есть queryset
всех объектов List, связанных с вошедшим в систему пользователем.
Однако, передавая пользователю форму перед ее сохранением, я получаю эту ошибку:
TypeError at /listas/
__init__() got an unexpected keyword argument 'user'
Я открыт для пользователя CreateView
, так как, согласно моим исследованиям, мне больше подходит необходимость создания новой записи и отображения набора запросов в шаблоне.
models.py:
class List(models.Model):
LISTA_STATUS = (
('recibida_pagada', 'Recibida y pagada'),
('recibida_no_pagada', 'Recibida pero no pagada'),
('en_revision', 'En revision'),
('en_camino', 'En camino'),
('entregada', 'Entregada'),
('cancelada', 'Cancelada')
)
name = models.CharField(max_length=100, default='Lista anónima')
user = models.ForeignKey(User, on_delete=models.CASCADE)
school = models.OneToOneField(School, on_delete=models.CASCADE, null=True, blank=True)
status = models.CharField(max_length=20, choices=LISTA_STATUS, default='recibida_no_pagada')
created_at = models.DateTimeField(auto_now_add=True)
modified_at = models.DateTimeField(auto_now=True)
class Meta:
ordering = ['created_at']
def __str__(self):
return str(self.id)
views.py:
class ListFormView(LoginRequiredMixin, FormView):
form_class = ListForm
template_name = "scolarte/listas.html"
success_url = reverse_lazy('lists:my_lists')
def get(self, request, *args, **kwargs):
context = self.get_context_data(**kwargs)
context['listas'] = List.objects.filter(user=request.user)
return self.render_to_response(context)
def form_valid(self, form):
form = ListForm(data=self.request.POST, user=self.request.user)
form.save()
return super(ListFormView, self).form_valid(form)
html :
{% block content %}
<div class="container">
<div class="row">
<div class="col-xl-12">
<!-- START HEADER Content -->
<h1 class="display-4 mb-3 mt-2">
Mis Listas
</h1>
<!-- END HEADER Content -->
</div>
</div>
<div class="row">
<form action="{% url 'lists:my_lists' %}" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit">
</form>
</div>
<div class="row mt-5">
{% for lista in listas %}
<!-- START CONTENT -->
<div class="card-deck">
<a href="{% url 'lists:list_details' lista.id %}">
<div class="card">
<div class="card-body">
<p>{{ lista.school.name }}</p>
<h5 class="card-title">{{ lista.name }}</h5>
<p class="card-text"><small class="text-muted">Última modificación: {{ lista.modified_at }}</small></p>
</div>
</div>
</a>
</div>
<!-- END Card Counter -->
{% endfor %}
</div>
{% endblock %}
urls.py:
от. импорт представлений
app_name = "lists"
urlpatterns = [
path('', views.ListFormView.as_view(), name='my_lists'),
path('agregar-producto/', views.add_product_to_list, name='add_product_to_list'),
path('mis-listas/', views.update_lists_count, name='update_lists_count'),
path('lista-detalles/<int:lista_id>/', views.list_details, name='list_details'),
]