【问题标题】:UpdateView template only displays pk of a related model, How can a get it to display other fields?UpdateView 模板只显示一个相关模型的pk,如何让它显示其他字段?
【发布时间】:2019-01-21 17:15:42
【问题描述】:

我是 django 的初学者,我的问题比较美观……现在我的模板如下所示:
editSubcategory template

select 标记中的第一个选项是先前在 CreateView 中选择的类别外键...如果不只是显示外键我还可以显示类别模型的名称字段看起来像select标签中的其他选项。

这是我的代码:

models.py

class Categories(models.Model):
    name = models.CharField(max_length=50)

    def __str__(self):
        return self.name


class Subcategories(models.Model):
    name = models.CharField(max_length=50)
    category = models.ForeignKey(
        'Categories',
        on_delete=models.CASCADE,
    )

    def __str__(self):
        return self.name

views.py

from django.views.generic import UpdateView
from django.urls import reverse_lazy

from .models import Subcategories

from .forms import SubcategoriesForm

class EditSubcategory(UpdateView):
    model = Subcategories
    form_class = SubcategoriesForm
    template_name = 'inventory/edit/editSubcategory.html'
    success_url = reverse_lazy('inventory:subcategoriesList')

    def get_context_data(self, **kwargs):
        context = super(EditSubcategory, self).get_context_data(**kwargs)
        context['categories'] = Categories.objects.all()
        return context

forms.py

from .models import Categories
from .models import Subcategories

class CategoriesForm(forms.ModelForm):
    class Meta:
        model = Categories
        fields = ('name',)

class SubcategoriesForm(forms.ModelForm):
    class Meta:
        model = Subcategories
        category = forms.ModelMultipleChoiceField(queryset=Categories.objects.all())
        fields = ('name', 'category')

urls.py

path('subcategories/<int:pk>/edit', views.EditSubcategory.as_view(), name='editSubcategory'),

editSubcategory.html

<form enctype="multipart/form-data" action="" method="POST" id="editSubcategoryForm">
  {% csrf_token %}

  <div>
    <fieldset class="module aligned">

      <div class="form-row field-name">
        <div>
          <label class="lead">Name: </label>
          <input type="text" name="name" class="form-control" maxlength="50" required id="id_name" value="{{ form.name.value }}"/>
        </div>
      </div>

      <br />

      <div class="form-row field-category">
        <div>
          <label class="lead">Category: </label>
          <select name="category" class="form-control" required id="id_category">
            <option value="{{ form.category.value }}">{{ form.category.value }}</option>
            {% for category in categories.all %}
              <option value="{{category.pk}}">{{category.pk}} -- {{ category.name }}</option>
            {% endfor %}
          </select>
        </div>
      </div>

      <br />

    </fieldset>
  </div>
  <br />
  <input type="submit" value="Guardar"/>
</form>

有没有办法做到这一点?

在此先感谢

【问题讨论】:

    标签: django django-templates django-class-based-views


    【解决方案1】:

    没关系,我自己找到了解决方案...我只是在 editSubcategory.html 中将 {{ form.category.value }} 更改为 {{ object.category }}

    现在是这个样子

    <select name="category" class="form-control" required id="id_category">
      <option value="{{ form.category.value }}">{{ object.category }}</option>
        {% for category in categories.all %}
          <option value="{{category.pk}}">{{category.pk}} -- {{ category.name }}</option>
        {% endfor %}
    </select>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-05
      • 2013-02-16
      • 2011-12-02
      • 1970-01-01
      • 2014-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多