Как отобразить объект двух форм в шаблоне - PullRequest
0 голосов
/ 28 декабря 2018

Я хочу отобразить имя пользователя, используя {{ object.first_name }}.Я не могу отобразить это.Я также использую встроенный модуль User, где UserProfile связан с OneToOneField.если я использую {{ p_form.user_image }}, это поле ввода отображаемого изображения profile.html

{% extends "base.html" %}
    {% load crispy_forms_tags %}
    {% block content %}
    <div class="col-md-6 grid-margin stretch-card">
        <div class="card">
          <div class="card-body">
                <h4 class="card-title">Profile Information - {{ object.first_name }}</h4>
            <form class="forms-sample" action="" method="POST" enctype="multipart/form-data">
                {% csrf_token %}
                {{ u_form|crispy }}
                {{ p_form|crispy }}

                <button class="btn btn-success mr-2" type="submit">Update</button>
            </form>
          </div>
        </div>
    </div>
    <ul>
    {% for key, val in object %}
      <li>{{ key }}: {{ val }}</li>
    {% endfor %}
    </ul>
    {% endblock content %}

Views.py

def userProfileUpdate(request, pk):
    if request.method == 'POST':
        u_form = UserUpdateForm(request.POST, instance=User.objects.get(id=pk))
        p_form = UserProfileForm(request.POST, 
                                 request.FILES,
                                 instance=UserProfile.objects.get(user_id=pk))
        if u_form.is_valid() and p_form.is_valid():
            u_form.save()
            p_form.save()
            messages.success(request, 'Profile Updated!!!')
            return redirect('users')
    else:
        u_form = UserUpdateForm(instance=User.objects.get(id=pk))
        p_form = UserProfileForm(instance=UserProfile.objects.get(user_id=pk))
    context ={
        'u_form': u_form,
        'p_form': p_form
    }

    return render(request, 'users/profile.html', context)

UserProfile Model

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)

1 Ответ

0 голосов
/ 28 декабря 2018

Вам необходимо передать object в качестве контекста.Вы можете попробовать так:

def userProfileUpdate(request, pk):
    if request.method == 'POST':
        u_form = UserUpdateForm(request.POST, instance=User.objects.get(id=pk))
        p_form = UserProfileForm(request.POST, 
                                 request.FILES,
                                 instance=UserProfile.objects.get(user_id=pk))
        if u_form.is_valid() and p_form.is_valid():
            u_form.save()
            p_form.save()
            messages.success(request, 'Profile Updated!!!')
            return redirect('users')
    else:
        instance = User.objects.get(id=pk)
        u_form = UserUpdateForm(instance=instance)
        p_form = UserProfileForm(instance=UserProfile.objects.get(user_id=pk))
    context ={
        'object': instance, <-- here
        'u_form': u_form,
        'p_form': p_form
    }

    return render(request, 'users/profile.html', context)

Или, если пользователь вошел в систему, используйте {{ user.first_name }}, чтобы показать имя.

...