Как я могу добавить имя зарегистрированного пользователя в форму django - PullRequest
0 голосов
/ 18 февраля 2020

Я просто хочу поместить имя пользователя вошедшего в систему пользователя в поле автора и в то же время назначить поле автора в качестве имени пользователя в базе данных.

def create_vacation(request):
    form = creationForm(request.POST or None)
    vacations = Vacation.objects.all()
    vacations.author=request.user.username
    if form.is_valid():
        form.save()

        return redirect('/vacations/all')

    return render(request, 'creationForm.html', {'form': form})

, и это отпуск модель

class Vacation(models.Model):
    vacationInformation = models.TextField()
    startDate= models.DateTimeField('start date')
    endDate = models.DateTimeField('end date')
    author = models.ForeignKey(User, null=True, on_delete=models.SET_NULL)
    def __str__(self):
        return self. vacationInformation

это шаблон формы

 <form method="post" novalidate>
        {% csrf_token %}

        {% for hidden_field in form.hidden_fields %}
            {{ hidden_field }}
        {% endfor %}

        {% if form.non_field_errors %}
        <div class="alert alert-danger" role="alert">
            {% for error in form.non_field_errors %}
                {{ error }}
            {% endfor %}
        </div>
        {% endif %}

        {% for field in form.visible_fields %}
        <div class="form-group">
            {{ field.label_tag }}

            {% if form.is_bound %}
            {% if field.errors %}
                {% render_field field class="form-control is-invalid" %}
            {% for error in field.errors %}
            <div class="invalid-feedback">
                {{ error }}
            </div>
            {% endfor %}
            {% else %}
                {% render_field field class="form-control is-valid" %}
            {% endif %}
            {% else %}
                {% render_field field class="form-control" %}
            {% endif %}

            {% if field.help_text %}
            <small class="form-text text-muted">{{ field.help_text }}</small>
            {% endif %}
            {% if vacation %}

        {% endif %}
        </div>
        {% endfor %}

        <button type="submit" class="btn btn-primary">Submit</button>

    </form>

Я могу нормально отобразить все данные об отпуске на главной странице, за исключением имени автора

 {% for vacation in vacations %}
            <tr>
                <td>{{ vacation.vacationInformation }}</td>
                <td>{{ vacation.startDate }}</td>
                <td>{{ vacation.endDate }}</td>
                <td>{{ vacation.author }}</td>

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

1 Ответ

0 голосов
/ 18 февраля 2020

Вам необходимо получить авторизованного пользователя. Затем вы можете использовать пользователя для заполнения начальных значений в форме.

from django.contrib.auth import get_user
# ...

def create_vacation(request):
    if request.method == 'POST':
        form = creationForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('/vacations/all')
    else:
        # Get the currently logged-in User.
        user = get_user(request)
        # Provide User as initial data to the form
        form = creationForm(initial={'author': user})

    return render(request, 'creationForm.html', {'form': form})

Соответствующая документация:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...