Django 将“更新”视图中的两个模型传递到同一模板

Django 将“更新”视图中的两个模型传递到同一模板,django,django-models,django-views,django-forms,django-templates,Django,Django Models,Django Views,Django Forms,Django Templates,我想将两个模型User(内置模型)和Profile模型呈现到同一个模板Profile\u form.html,以便用户可以更新User模型和Profile模型的数据 class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) image = models.ImageField(default='default.png', upload_to='profile_pi

我想将两个模型
User
(内置模型)和
Profile
模型呈现到同一个模板
Profile\u form.html
,以便用户可以更新
User
模型和
Profile
模型的数据

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    image = models.ImageField(default='default.png', upload_to='profile_pics')
    description = models.TextField()

    def __str__(self):
        return self.user.username + "'s Profile"
这是我的
配置文件
型号

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    image = models.ImageField(default='default.png', upload_to='profile_pics')
    description = models.TextField()

    def __str__(self):
        return self.user.username + "'s Profile"
这是我的
profile\u form.html

{% extends "base.html" %}
{% load crispy_forms_tags %}
{% block title %}
    Make your Profile
{% endblock title %}

{% block content %}
<div class="container mb-6">
    <form action="" method="POST" class="form-group">
        {% csrf_token %}
        {{ form|crispy }}
        <button type="submit" class="btn btn-success">Submit</button>
    </form>
</div>
{% endblock content %}
我希望我的
档案
模型位于
用户
模型表单下方


请帮我完成这个

要在同一视图中添加一个OneToOne关系,只需覆盖get\u context\u data方法并提供一个附加表单。 如果您还没有配置文件表单,只需创建一个简单的配置文件表单:

#yourapp/forms.py
class ProfileForm(ModelForm):
    class Meta:
        model = Profile
        fields = "__all__"
现在,要在updateview中使用它,请导入它,然后您需要像这样更改它:

class UserUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
    model=User
    fields=['username', 'first_name', 'last_name']
    success_url='/'

    # create context manually
    def get_context_data(self, **kwargs):
        data = super(UserUpdateView, self).get_context_data(**kwargs)
        if self.request.POST:
            data["profile"] = ProfileForm(self.request.POST)
        else:
            # accessing the profile object
            data["profile"] = ProfileForm(instance=self.object.profile)
        return data
现在,您的模板将可以访问上下文概要文件

...
{{ form|crispy }}
{{ profile|crispy }}
...

谢谢。这很有效,我能帮上忙。还要注意的是,如果配置文件是可选的或为空(但对于您的用户模型,这不会发生),那么这将失败。请记住将您的问题标记为已回答或有帮助的答案。