Django-如何显示对象内的所有项目

时间:2018-12-11 17:44:11

标签: django database object

我有一个Profile对象,该对象与Hobbies对象之间具有许多对多的关系。配置文件用于创建用户。每个用户还可以具有预定义的兴趣爱好负载。我要做的是让用户选择他们感兴趣的兴趣爱好。但是,我不确定如何显示所有这些兴趣爱好并让用户在实际的显示中进行挑选。这是代码:

TYPES = (
        ("Football", "Football"),
        ("Cricket", "Cricket"),
        ("Swimming", "Swimming"),
        ("Cycling", "Cycling")
        )


class Hobby(models.Model):
    myfield = MultiSelectField(choices = TYPES)

用户:

class Profile(models.Model):
    email = models.CharField(max_length=200)
    hobbies = models.ManyToManyField(Hobby)

我使用的HTML代码在这里:

<span class="fieldname">Hobbies</span>
        {% for hobby in all_hobbies %}
                <input type="checkbox" name={{hobby}} value={{hobby}}> {{hobby}}<br>
        {% endfor %}

但是,它仅显示enter image description here

我希望它显示的是具有选择的所有爱好,而不是整个对象。我不确定如何执行此操作,将不胜感激。

2 个答案:

答案 0 :(得分:0)

尝试做类似的事情

<span class="fieldname">Hobbies</span>
{% for hobby in all_hobbies %}
    <input type="checkbox" name="{{ hobby.myfield }}" value="{{ hobby.myfield }}"> {{ hobby.myfield }}<br />
{% endfor %}

答案 1 :(得分:0)

在Hobby类下,您应该添加str方法,该方法将显示您的兴趣爱好的值,而不是'Object'

def __str__(self):
    return self.myfield

如果您使用的是Python 2.x,则也可以使用__unicode__代替__str__

编辑: 再次阅读您的问题后,我了解到您的问题特别是没有针对多个选择的多个复选框,这是您如何显示所有选择的方法,应将“兴趣爱好”字段作为上下文传递:

{% for value, text in form.hobbies.field.choices %}
  <div class="ui slider checkbox">
    <input id="id_hobbies_{{ forloop.counter0 }}" name="{{ form.hobbies.name }}" type="checkbox" value="{{ value }}"{% if value in checked_hobbies %} checked="checked"{% endif %}>
    <label>{{ text }}</label>
  </div>
{% endfor %}