我的模型中有一个复杂的结构,我不知道如何在同一模板上将外键链接到多对多字段。
一旦看到 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>