如何通过Forms到模板显示模型对象?

时间:2016-12-26 23:28:51

标签: python django django-models django-forms django-templates

我的模型中有一个复杂的结构,我不知道如何在同一模板上将外键链接到多对多字段。

一旦看到 models.py ,就会更容易解释:

class Font(models.Model):
    font_name = models.CharField(max_length=100)
    ...

class Background(models.Model):
    bk_color = models.CharField(max_length=20, blank=True)
    ...


class FormOne(models.Model):
    name = models.CharField(max_length=40)
    background = models.ForeignKey(Background, blank=True, null=True)
    checkbox = models.ManyToManyField(Font, blank=True)
    ...

我想为每个Font Item执行以下操作,从外键中添加背景颜色(bk_color)。这是棘手的部分,这应该在表单上完成。用户无法选择他的背景,仅由管理员通过无线电选择来定义。

所以我希望Form能够为每个项目的背景颜色显示这样的内容。

标题:____________

复选框:

[X] font_name1 - #333333< - 管理员面板上的管理员设置的颜色

[_] font_name2 - #94D32F

[X] font_name3 - #ffffff

问题在于,如果我通过视图显示颜色,我无法为每个复选框项目指定他自己的特定颜色。

如何实现以下目标?

forms.py:

class CustomChoiceField(forms.ModelMultipleChoiceField):
    def label_from_instance(self, obj):
        return mark_safe('<p class="checkbox-choice" style="%s">%s</p>' % (obj.font_family, obj.font_name))


class FormOneForm(forms.ModelForm):
    checkbox = CustomChoiceField(widget=forms.CheckboxSelectMultiple, queryset=Font.objects.all())
    background = forms.ModelChoiceFied(widget=forms.RadioSelect, queryset=Background.objects.all(), required=False)

    class Meta:
        model = FormOne
        fields = ['name']

模板文件:

<form action="{% url 'multistepform.views.step1' %}" method="post" enctype='multipart/form-data'>
{% csrf_token %}
...

<div class="checkbox-choice" style="background: ! BACKGROUND COLOR HERE ! ;">
{% for fcheck in form.background %}
    <div class="checkbox_id col-lg-3">{{ fcheck }}</div>
{% endfor %}
</div>

<input id="step1" type="submit" value="Submit" autocomplete="off" />
</form>

0 个答案:

没有答案