Поле модели Django по умолчанию из модели - PullRequest
0 голосов
/ 22 сентября 2019

Рассмотрим две модели в моих models.py:

Роли:

class Role(models.Model):
    role = models.CharField(max_length=255)
    nickname = models.CharField(max_length=255)
    is_hero = models.BooleanField(default=False)

    def __str__(self):
        return self.role

и

Игроки:

class Player(models.Model):
    name = models.CharField(max_length=255)
    role = models.ForeignKey(Role, on_delete=models.CASCADE)
    nickname = models.CharField(max_length=255, default="Use the default nickname from the role you just chose but also be able to change it from within this model.")
    is_hero = models.BooleanField(default="Use the default is_hero from the role you just chose but also be able to change it from within this model.")

    def __str__(self):
        return self.name

Также учтите, чтоЯ уже сделал роль под названием "Dumbo" с псевдонимом "Dunm" и is_hero, равным False.

Теперь я продолжаю и пытаюсь использовать роль в моем новом игроке после задания имени игрока, выбираюмоя роль, но как мне использовать значения моей выбранной роли в моем новом проигрывателе по умолчанию для псевдонима и is_hero, и в то же время разрешить их переопределение, если так?

Спасибо,

Редактировать:

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

{% load fieldcss %}
    <div class="card">
        <div class="card-header">
            {% if fieldset.name %}<h4 class="card-title">{{ fieldset.name }}</h2>{% endif %}
            {% if fieldset.description %}
                <div class="description">{{ fieldset.description|safe }}</div>
            {% endif %}
        </div>
        <div class="card-body">
            {% for line in fieldset %}
            <div class="row">
                    {% for field in line %}
                            {% if not line.fields|length_is:'1' and not field.is_readonly %}{{ field.errors }}{% endif %}
                            {% if name == "CheckboxInput" %}
                                {{ field.field }}{{ field.label_tag }}

                            {% else %}
                                {{ field|addlabel:field.field.label|safe }}
                                {% if field.is_readonly %}
                                    <div class="readonly">{{ field.contents }}</div>
                                {% else %}
                                <div class="col-sm-10">
                                    {% if line.fields|length_is:'1' %}{{ line.errors }}{% endif %}
                                    <div class="form-group">
                                        {{ field|addclass:field.field.auto_id|safe }}
                                        {% if field.field.help_text %}
                                            <span class="form-text">{{ field.field.help_text|safe }}</span>
                                        {% endif %}
                                    </div>
                                </div>
                                {% endif %}
                            {% endif %}
                    {% endfor %}
            </div>
            {% endfor %}
        </div>
    </div>
</fieldset>

1 Ответ

2 голосов
/ 22 сентября 2019

Это не то, что вы можете сделать в модели, но путем передачи значений в форму из представления во время создания.Например:

class PlayerCreateForm(forms.ModelForm):
    class Meta:
        model = Player
        fields = ('name', 'nickname', 'is_hero')

def create_player_from_role(request, role_id):
    role = get_object_or_404(Role, role_id)
    if request.method == 'POST':
        form = PlayerCreateForm(request.POST)
        if form.is_valid():
            player = form.save(commit=False)
            player.role = role
            player.save()
            return redirect('/')
    else:
        form = PlayerCreateForm(initial={'nickname': role.nickname, 'is_hero': role.is_hero})
    return render(request, 'create_player.html', {'form': form})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...