【问题标题】:Django selection form from model模型中的 Django 选择表
【发布时间】:2018-05-30 11:54:28
【问题描述】:

好的,所以我已经在这个标签系统上工作了几个星期。

我创建了一个 django 网站,让客户可以为我们翻译标签。我正在创建一个表单,客户可以在其中选择他们希望创建相应翻译的项目代码。这意味着表单从模型中获取它的选择数据。选择项目代码后,我希望能够获取所选的项目代码并将用户转换为匹配该项目代码的URL。

目前我正在使用ModelMultipleChoiceField 从模型中获取数据。这有效,我能够以 HTML 表单显示数据。但是我无法使用cleaned_data 获取数据,因为它只返回整个查询集请求。

这意味着我收到了错误

NoReverseMatch at /labelcreator/
Reverse for 'create_label' with keyword arguments '{'pk': <QuerySet [<Label: 13272432 Collar>]>}' not found. 1 pattern(s) tried: 
['labelcreator\\/(?P<pk>[0-9]+)\\/create_label\\/$']

请看下面的代码。

forms.py

class LabelListForm(forms.Form):
    item = forms.ModelMultipleChoiceField(queryset=Label.objects.all(), label="")

models.py

class Label(models.Model):
    item_code = models.IntegerField(unique=True, primary_key=True)
    item_description = models.CharField(max_length=50)
    label_image = models.ImageField(blank=True, null=True)
    label_completed = models.BooleanField(default=False)
    created_date = models.DateTimeField(default=timezone.now)
    submitted_date = models.DateTimeField(blank=True, null=True)

    class Meta:
        verbose_name = "label"
        verbose_name_plural = "labels"

    def submit(self):
        self.submitted_date = timezone.now()

    def get_absolute_url(self):
        return reverse('create_label', kwargs={'pk'. self.pk})

    def __str__(self):
        return "{0} {1}".format(self.item_code, self.item_description)

views.py

class LabelListView(LoginRequiredMixin, View):
    form_class = LabelListForm
    template_name = 'labelcreator/overview_create.html'

    def get(self, request, *args, **kwargs):
        form = self.form_class()
        return render(request, self.template_name, {'form': form})

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        if form.is_valid():
            item = form.cleaned_data['item']
            return reverse('labelcreator:create_label', kwargs={'pk': item})
        return render(request, self.template_name, {'form': form})

模板

<link rel="stylesheet" href="{% static 'labelcreator/css/overview_edit_master.css' %}">
    <div class="container">
        <div class="row">
            <div class="col-lg-12">
                <form class="form-horizontal" method="POST">
                      {% csrf_token %}
                      <div class="form-group" id="productGroup">
                          <label for="inlineFormCustomSelectPref">Choose Product...</label>
                          {{ form.as_p }}
                      </div>
                      <div class="form-group">
                         <button type="submit" class="btn btn-primary my-1 pull-right">Create 
Label</button>
                     </div>
                </form>
            </div>
        </div>
    </div>

非常感谢任何帮助

【问题讨论】:

    标签: django python-3.x django-forms django-templates django-views


    【解决方案1】:

    我不明白您为什么在这里使用多项选择字段。你想选择一个标签,然后重定向到它的 create_label 页面;您应该使用 ModelChoiceField。

    【讨论】:

    • 是的,这对我来说似乎很明显。我已经纠正了这一点。虽然我仍然无法从 cleaned_data 中获得我需要的信息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 2012-11-23
    • 2012-05-02
    • 2014-09-21
    • 2015-07-06
    • 2021-12-02
    • 1970-01-01
    相关资源
    最近更新 更多