UpdateView 模板只显示一个相关模型的pk,如何让它显示其他字段?
Posted
技术标签:
【中文标题】UpdateView 模板只显示一个相关模型的pk,如何让它显示其他字段?【英文标题】:UpdateView template only displays pk of a related model, How can a get it to display other fields? 【发布时间】: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>
有没有办法做到这一点?
在此先感谢
【问题讨论】:
【参考方案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>
【讨论】:
以上是关于UpdateView 模板只显示一个相关模型的pk,如何让它显示其他字段?的主要内容,如果未能解决你的问题,请参考以下文章
使用基于类的 UpdateView 在 Django 中更新用户模型
Django - UpdateView ModelForm 在查询集字段上设置初始值