Джанго - Как отобразить все предметы внутри объекта - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть объект профиля, который имеет отношение многих ко многим к объекту Хобби.Профиль используется для создания пользователя.Каждый пользователь также может иметь множество предопределенных увлечений.То, что я хочу сделать, - это позволить пользователям выбирать некоторые хобби, которые им интересны. Однако я не уверен, как отобразить все эти хобби и позволить пользователям выбирать их на реальном экране.Вот код:

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 голосов
/ 12 декабря 2018

В классе Hobby вы должны добавить метод str, который будет отображать значение вашего хобби вместо 'Object'

def __str__(self):
    return self.myfield

Вы также можете использовать __unicode__ вместо __str__, есливы работаете с Python 2.x

Редактировать: После того, как я снова прочитал ваш вопрос, я понял, что ваша проблема заключается в том, что у вас не было нескольких флажков для нескольких вариантов выбора, вот как выможет показать все варианты, вы должны передать поле хобби в качестве контекста:

{% 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 %}
0 голосов
/ 11 декабря 2018

Попробуйте сделать что-то вроде

<span class="fieldname">Hobbies</span>
{% for hobby in all_hobbies %}
    <input type="checkbox" name="{{ hobby.myfield }}" value="{{ hobby.myfield }}"> {{ hobby.myfield }}<br />
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...