Как я могу заставить эту форму работать и сохранять обновленную информацию?
Мне удалось заставить форму отображаться в модале, что было проблемой, с которой я столкнулся ранее, теперь я пытаюсь заставить это работать. Есть ли способ обойти это? Также я хочу проверить, что метод == 'POST', прежде чем проверять, действительна ли форма, но не могу найти решение...
просмотров:
class ProfileDetailView(LoginRequiredMixin, DetailView):
model = Profile
template_name = 'network/profile.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
user = User.objects.get(username__iexact=self.request.user)
profile = Profile.objects.get(user=user)
form = ProfileModelForm(instance=profile)
confirm = False
rel_r = Relationship.objects.filter(sender=profile)
rel_s = Relationship.objects.filter(receiver=profile)
rel_receiver = []
rel_sender = []
for item in rel_r:
rel_receiver.append(item.receiver.user)
for item in rel_s:
rel_sender.append(item.sender.user)
if form.is_valid():
form.save()
confirm = True
context["rel_receiver"] = rel_receiver
context["rel_sender"] = rel_sender
context["posts"] = self.get_object().get_all_authors_posts()
context["len_posts"] = True if len(self.get_object().get_all_authors_posts()) > 0 else False
context["form"] = form
context["confirm"] = confirm
context["profile"] = profile
return context
Форма:
class ProfileModelForm(forms.ModelForm):
class Meta:
model = Profile
fields = ('first_name', 'last_name', 'bio', 'avatar')
Модель:
class Profile(models.Model):
first_name = models.CharField(max_length=64, blank=True)
last_name = models.CharField(max_length=64, blank=True)
user = models.OneToOneField(User, on_delete=models.CASCADE)
country = models.CharField(max_length=64, blank=True)
avatar = models.ImageField(upload_to='avatars', default='avatar.png')
background = models.ImageField(upload_to='backgrounds', default='background.png')
following = models.ManyToManyField(User, related_name='following', blank=True)
bio = models.TextField(default="No Bio..")
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
slug = models.SlugField(unique=True, blank=True)
objects = ProfileManager()
def __str__(self):
return f"{self.user.username}"
def get_absolute_url(self):
return reverse("profile-view", kwargs={"slug": self.slug})
HTML:
Не уверен, пробовали ли вы это:
В вашем представлении вы должны написать функцию под названием post.
def post(self, request):
if request.method == 'POST':
form = self.form(request.POST)
if form.is_valid():
*whatever you need to do after you've validated the from*