Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在CreateView的Django模板中显示foriegnkey字段_Django_Python 3.x_Foreign Keys_Django Class Based Views - Fatal编程技术网

在CreateView的Django模板中显示foriegnkey字段

在CreateView的Django模板中显示foriegnkey字段,django,python-3.x,foreign-keys,django-class-based-views,Django,Python 3.x,Foreign Keys,Django Class Based Views,我正在尝试使用ForeignKey字段中的值在CreateView中显示一个清单以进行说明 models.py class Structure(models.Model): name = models.CharField(max_length = 30) description =models.CharField(max_length = 300, null=True, blank=True) def __str__(self): return self.

我正在尝试使用ForeignKey字段中的值在CreateView中显示一个清单以进行说明

models.py

class Structure(models.Model):
    name = models.CharField(max_length = 30)
    description =models.CharField(max_length = 300, null=True, blank=True)
    def __str__(self):
        return self.name

class SelectedFramework(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    structure = models.ForegignKey(Structure)
    selected = models.BooleanField(default = False)
views.py

class FrameworkCreateView(generic.CreateView):
    model = SelectedFramework
    fields =['structure', 'selected']
    template_name = 'catalogue/structure.html'
    def form_valid(self, form):
        form.instance.user = self.request.user
        return super(FrameworkCreateView, self).form_valid(form)
structure.html

{% extends 'catalogue\base.html' %}
{% block container %}
<h2>{% block title %}Structures{% endblock title %}</h2>

<form action="" method="post">
    {% csrf_token %}
    {% for field in form %}
    <div class="col-sm-10">{{form.structure}} {{form.selected}}</div><br>
{% endfor %}
</div>
</form>
{% endblock %}
{%extends'catalog\base.html%}
{%block container%}
{%block title%}结构{%endblock title%}
{%csrf_令牌%}
{%形式的字段为%}
{{form.structure}{{form.selected}}
{%endfor%} {%endblock%}
上面的代码可以工作,但会将ForeignKey“structure”显示为一个下拉列表,其值为
\uuu str\uu
。是否有办法在CreateView中选中
中的复选框来显示
结构.name
结构.description
的字符串

在模板中使用:

{{ form.structure.name }}
{{ form.structure.description}}

如果希望通过在模板中迭代来获取字段。你必须使用-

{% for field in form %}
    {{ field }}
{% endfor %}

不必使用任何点符号来获取字段。如果要获取字段的标签,可以使用
{{field.label}
通常在
{{field}

之前使用
{field.label}
,您可以编写自定义表单,覆盖保存方法,并在此处手动创建
结构
对象:

class FrameworkForm(forms.ModelForm):
    structure_name = forms.CharField(required=True)
    structure_description = forms.CharField(required=False)

    class Meta:
        model = SelectedFramework
        fields = [
            'structure_name', 'structure_description', 'selected'
        ]

    def save(self, commit=False):
        instance = super(FrameworkForm, self).save(commit=False)
        structure = Structure(
            name=self.cleaned_data.get('structure_name'),
            description=self.cleaned_data.get('structure_description')
        )
        structure.save()
        instance.structure = structure
        instance.save()
        return instance
同时将
form\u class=FrameworkForm
添加到视图中,而不是
fields=['structure','selected']

编辑:

也许你想要这样的东西:

<ul>
{% for structure in form.fields.structure.choices.queryset %}
    <li>{{ structure.name }} - {{ structure.description }}</li>
{% endfor %}
</ul>
    {%用于form.fields.structure.choices.queryset%中的结构}
  • {{structure.name}-{{structure.description}
  • {%endfor%}

我已经尝试了这两种方法,并使用双下划线引用了foreignkey,但它所做的只是将字段改为allblank@Baishakhi_Dasgupta这只会给我一个带有一个复选框的下拉列表,而不是只生成两个字符域的带有多个复选框的列表。我正在尝试显示外键值,因此Django不允许在
CreateView
中同时使用
form\u class
字段
,您可以使用其中一个,但不能同时使用另一个。我知道Django不允许同时使用这两个。我写道,您可以添加
form\u class
而不是
字段
。我编辑了我的答案,它可能对你有用。没有在for循环中工作所有内容都是空白的,不知道为什么。我试着用下划线来代替点,但还是一无所获。