【发布时间】:2021-03-25 01:13:14
【问题描述】:
作为 Django 的新手,我确信有一些我没有看到的明显内容。我有一个与 userprofile 模型一对一关系的用户模型,我在其中存储个人资料照片。我混合了 DetailView 和 Formview,因为我希望用户转到他的详细信息页面并只更新照片,但不知何故它对我不起作用。我知道我可以使用 UpdateView 完成这项工作,但出于教学目的,谁能告诉我为什么这不起作用?我正在尝试更新 form_valid 方法中的模型字段,但这不起作用,它们只是保留旧值。一开始我以为是因为我这边的一些错误而无法更新的照片,但我也尝试过更新其他字符串字段,但它不起作用。这里是代码:(注释掉的字段是我尝试使用 get_object_or_404 和其他函数更新几个模型字段的地方)
class UserDetail(FormMixin, DetailView):
template_name = "users/user_detail.html"
model = User
form_class = forms.UserPhotoForm
def get_success_url(self):
return reverse('users:user_detail', args=[str(self.get_object().pk)])
def get_context_data(self, **kwargs):
user = self.get_object()
form = forms.UserPhotoForm(instance=user)
context = super().get_context_data(**kwargs)
context['user_rating'] = CotizacionReview.objects.filter(cotizacion__user=self.get_object()).aggregate(Avg('nota'))
context['form'] = form
return context
def form_valid(self, form):
form.save()
return super(UserDetail, self).form_valid(form)
def post(self, request, *args, **kwargs):
a = get_object_or_404(User, pk=self.get_object().id).userprofile
form = forms.UserPhotoForm(request.FILES['avatar'], instance=a)
# get_object_or_404(User, pk=self.get_object().id).apellido = '1234'
if form.is_valid():
# print(get_object_or_404(User, pk=self.get_object().id).userprofile.avatar)
# I tried updating several model fields here, but didnt work
# print(request.FILES['avatar'])
return self.form_valid(form)
else:
return self.form_invalid(form)
这里是模型:
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
avatar = models.ImageField(upload_to='profile_pics', default='profile_pics/default-user-icon-4.jpg', blank=True)
telefono = models.CharField(max_length=12, blank=True)
nombre = models.CharField(max_length=64, blank=True)
apellido = models.CharField(max_length=64, blank=True)
link = models.CharField(max_length=256, blank=True)
educacion = models.CharField(max_length=256, blank=True)
experiencia = models.TextField(max_length=512, blank=True)
birthdate = models.DateField(blank=True, null=True)
@receiver(post_save, sender=User)
def update_profile_signal(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
【问题讨论】:
标签: django forms django-models detailview