как я могу сохранить или обновить форму данных отдельно в django? - PullRequest
0 голосов
/ 04 августа 2020

извините, если я не смог задать вопрос должным образом, но я хочу обновить форму, и эта форма разбивается на 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)
...