【发布时间】:2020-09-28 09:56:08
【问题描述】:
遇到了这样一个问题,关于用户的当前值没有传递给表单。我要做的是将用户模型和配置文件模型结合起来,然后以两种形式显示当前用户数据进行编辑。它似乎正确完成,但由于某种原因它不起作用。请告诉我谁明白这一点)
文件views.py:
class ProfilePage(UpdateView):
model=Profile
template_name="market/profile.html"
form_class=ProfileUpdateForm
second_model = User
second_form_class= UserUpdateForm
def get_context_data(self, **kwargs):
context = super(ProfilePage,self).get_context_data(**kwargs)
context['UserUpdateForm'] = UserUpdateForm(
prefix='UserUpdateForm',
data = self.request.POST,
instance=self.request.user,
)
context['ProfileUpdateForm'] = ProfileUpdateForm(
prefix='ProfileUpdateForm',
data = self.request.POST,
files = self.request.FILES,
instance=self.request.user.profile,
)
return context
def post(self, request, *args, **kwargs):
super(ProfilePage,self).post(self, request, *args, **kwargs)
context = self.get_context_data(**kwargs)
if context['UserUpdateForm'].is_valid():
context['UserUpdateForm'].save()
elif context['ProfileUpdateForm'].is_valid():
context['ProfileUpdateForm'].save()
return self.render_to_response(context)
文件forms.py:
class UserUpdateForm(forms.ModelForm):
class Meta:
model = User
fields = ("username",)
class ProfileUpdateForm(forms.ModelForm):
class Meta:
model=Profile
fields=('valuta','slug','avtor')
文件models.py:
class Profile(models.Model):
user=models.OneToOneField(User,on_delete=models.CASCADE)
avtor=models.ImageField(default='user_images/default.jpg', upload_to='user_images',blank=True)
slug=models.SlugField(max_length=50, unique=True,blank=True)
valuta=models.ForeignKey(Valuta,default="5", on_delete=models.CASCADE)
文件profile.html:
<form method="POST">
{% csrf_token %}
{{UserUpdateForm.as_p}}
<button type="submit">send</button>
</form>
<form action="" enctype="multipart/form-data" method="POST">
{% csrf_token %}
{{ProfileUpdateForm.as_p}}
<button type="submit">send</button>
</form>
【问题讨论】:
-
当您说
current values about the user are not passed to the form时,您的意思是当表单初始化时,表单字段没有预填充用户对象值?或者你的意思是在发布时? -
当页面加载并发出这个ibb.co/BfYwbzk,我希望表单包含有关用户的当前数据,有他的用户名
-
模板只是在做{{ form }}吗?如果需要,您可以在表单的 init 函数中将
initial声明为 kwarg。如果您不知道我的意思,请告诉我,我会写一个答案 -
是的,我想这就是我需要的。我需要用户立即查看他们的数据。我通过添加模板更新了问题
标签: django django-models django-forms django-views