Django:使用FormView类将request.user传递给表单

问题描述 投票:0回答:1

我有一个与用户模型List相关的模型ForeignKey。>

我正在使用FormView类在模板上显示此表单,除了发送变量上下文listas之外,该上下文是与登录用户相关的所有List对象的queryset

但是,在将用户保存到表单之前将其传递给表单,会出现此错误:

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 =“列表”

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'),
]

我有一个与用户外键模型相关的模型列表。我正在使用FormView类在模板上显示此表单,除了发送变量上下文列表以外,它是所有列表的查询集...

python django
1个回答
0
投票

感谢@hendrikschneider将我指向这篇文章:

© www.soinside.com 2019 - 2024. All rights reserved.