извините, если я не смог задать вопрос должным образом, но я хочу обновить форму, и эта форма разбивается на 3 части, и эта форма имеет более одного поля, которое мне нужно обновить, но отдельно, поэтому, когда я это сделал, запрос отправил, но данные не сохраняются, когда я проверяю процесс, я вижу, что эта форма недействительна, поэтому в этом случае я попытался обновить всю форму, отправив данные обычным способом в HTML:
<div>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit">
</form>
</div>
и здесь я вижу, что данные приняты для сохранения, так как я могу сохранить или обновить форму данных отдельно, а не как пакет, так сказать?
information_form. html
<!-- Update Overview -->
<div class="modal fade overview_info" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="container">
<div class="form-group">
<form method="post">
{% csrf_token %}
<label>Overview:</label>
<p class="col-xs-12">{{ form.overview }}</p>
<button type="submit" class="btn btn-primary btn-lg">Update</button>
</form>
</div>
</div>
</div>
</div>
</div>
<!-- Update Personal Information -->
<div class="modal fade personal_info" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="container">
<div class="form-group row">
<form method="post">
{% csrf_token %}
<label>City:</label>
<p class="col-xs-12">{{ form.city }}</p>
<label>Phone:</label>
<p class="col-xs-12">{{ form.phone }}</p>
<label>Sex:</label>
<p class="col-xs-12">{{ form.sex }}</p>
<button type="submit" class="btn btn-primary btn-lg">Update</button>
</form>
</div>
</div>
</div>
</div>
</div>
<!-- Update Skills Section -->
<div class="modal fade skills" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="container">
<div class="form-group row">
<form method="post">
{% csrf_token %}
<label>Skills:</label>
<p class="col-xs-12">{{ form.skill }}</p>
<button type="submit" class="btn btn-primary btn-lg">Update</button>
</form>
</div>
</div>
</div>
</div>
</div>
models.py
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.template.defaultfilters import slugify
CHOICE = [('male', 'male'), ('female', 'female')]
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
slug = models.SlugField(max_length=100, unique=True, blank=True)
overview = models.TextField(editable=True, blank=True, default='You have no an Overview yet')
city = models.CharField(max_length=20, blank=False)
phone = models.IntegerField(default=0, blank=True)
sex = models.CharField(max_length=10, default='male', choices=CHOICE)
skill = models.CharField(max_length=100, default='You have no skills yet')
logo = models.ImageField(upload_to='images/', default='images/default-logo.jpg', blank=True)
def __str__(self):
return self.user.username
def save(self, *args, **kwargs):
self.slug = slugify(self.user)
super().save(*args, **kwargs)
def create_profile(sender, **kwargs):
if kwargs['created']:
user_profile = UserProfile.objects.create(user=kwargs['instance'])
post_save.connect(receiver=create_profile, sender=User)
views.py
class ViewProfile(UpdateView):
queryset = UserProfile.objects.all()
template_name = 'account/profile.html'
form_class = UpdateInfoForm
slug_field = 'slug'
slug_url_kwarg = 'user_slug'
def get_success_url(self):
return reverse_lazy('account:view_profile', kwargs={'user_slug': self.request.user.userprofile.slug})
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
user_prof = UserProfile.objects.get(user=self.request.user)
context['user_prof'] = user_prof
context['get_favourite'] = User.objects.get(username=self.request.user.username).favorite.all()
return context
def form_valid(self, form):
form.instance.user_slug = self.request.user.userprofile.slug
self.object = form.save()
return super().form_valid(form)