Как узнать, какое поле изменяется в форме обновления - django - PullRequest
0 голосов
/ 29 июня 2018

Перед загрузкой изображений мне нужно сжать их, и для этого я использую PIL в формах, но проблема в том, что я не знаю, какое поле изображения изменилось (у меня есть два поля изображения), взгляните на класс формы

class UpdateProfileForm(forms.ModelForm):
    x = forms.FloatField(widget=forms.HiddenInput())
    y = forms.FloatField(widget=forms.HiddenInput())
    width = forms.FloatField(widget=forms.HiddenInput())
    height = forms.FloatField(widget=forms.HiddenInput())

    class Meta:
        model = UserProfileModel
        fields = ('profile_image','cover_image','about_self')
        widgets = {
            'file': forms.FileInput(attrs={
                'accept': 'image/*'  # this is not an actual validation! don't rely on that!
            })
        }

    def save(self):
        update_form = super(UpdateProfileForm, self).save()

        x = self.cleaned_data.get('x')
        y = self.cleaned_data.get('y')
        w = self.cleaned_data.get('width')
        h = self.cleaned_data.get('height')


        print(help(self.cleaned_data))

        image = Image.open(update_form.cover_image)
        cropped_image = image.crop((x, y, w+x, h+y))
        resized_image = cropped_image.resize((985, 370), Image.ANTIALIAS)
        resized_image.save(update_form.cover_image.path)

        return update_form

в данный момент я сжимаю только cover_image, но если загружено только изображение профиля, тогда cover_image также получит изменение (изменения применяются в текущем cover_image). Мне нужен метод, который возвращает bool, если поле изменено в классе формы.

Вот мой UserProfileModel:

class UserProfileModel(models.Model):
    user                    = models.OneToOneField(
                                  'User',
                                  unique=True,
                                  on_delete=models.CASCADE,
                                  related_name='userprofilemodel',
                                  editable=False)
    fullname                = models.CharField(max_length=90)
    profile_image           = models.ImageField(
                                  upload_to=upload_profile_path, 
                                  default='media/images/defaults/profile_image.png')
    cover_image             = models.ImageField(
                                  upload_to=upload_cover_path, 
                                  default='media/images/defaults/cover_image.jpg')
    about_self              = models.TextField(
                                  max_length = 500,
                                  default='Hello, now I am affiliated with Bekaim.')
    first_name              = models.CharField(
                                  max_length=50,
                                  null=True,
                                  blank=True)
    last_name               = models.CharField(
                                  max_length=50,
                                  null=True,
                                  blank=True)
    user_location           = models.ForeignKey(
                                  Location,
                                  related_name='user_location',
                                  on_delete=models.CASCADE,
                                  null=True,blank=True)
    slug                    = models.SlugField(
                                  max_length=255,
                                  unique=True,
                                  null=True,
                                  blank=True)
    alternavite_mobile_number= PhoneNumberField(
                                  verbose_name="Alternative number",
                                  max_length=13,
                                  unique=True,
                                  null=True)
    is_phone_pin_send       = models.BooleanField(default=False)
    verified                = models.BooleanField(default=False)
    phone_pin               = RandomPinField(length=6)
    email_activation_key    = models.CharField(max_length=40)
    # email_key_expires       = models.DateTimeField()

    def fullname_saver(self):
        self.fullname = self.user.name

    def get_absolute_url(self):
        return reverse('accounts:profile',
                    kwargs={'username': self.user.display_username})

    def __str__(self):
        return self.user.display_username
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...