Benim models.py
içinde, kaydetmeden önce ImageField'i işlemek için save()
geçersiz kıldım. Kullanıcı bir Charfield gibi diğer bazı alanını değiştirir ve nesneyi güncelleştirir yaniDjango Bir form alanı doldurulduğunda nasıl algılanır?
class Image(models.Model):
caption = models.Charfield(max_length=254)
image = models.ImageField(upload_to='')
def save(self, *args, **kwargs):
if self.image:
# image manipulations
super(Image, self).save(*args, **kwargs)
nesne ImageField değiştirmeden kaydedilirse manipülasyon görüntü üzerinde çalışacak olmamalıdır. Bunu test etmedim, ancak yukarıdaki kodda, kullanıcı eski dosyayı değiştirmek için yeni bir görüntü yüklemeden kaydetse bile, self.image her zaman True olacaktır.
Yani, bir resim dosyası ile başlamak için kullanıcı tarafından yüklenen olsun veya olmasın dayanarak bu kontrol planı:
if form.is_valid():
instance = form.save(commit=False)
if form.cleaned_data.get('image'):
image_was_uploaded = True
instance.save(image_was_uploaded=image_was_uploaded)
bu Bunu gerçekleştirmek için geçerli bir yöntem mi, yoksa daha iyi olduğunu/daha Pythonic yaklaşımı (umarım models.py
içinde çalışır, bu yüzden Yönetici ve DRF aynı işlevsellikten faydalanır)?
Eski dosyayı değiştirmek için yeni bir dosya yüklenip yüklenmediğini nasıl bilebilirim? – dtgq
Aldığınız dosya türüne bakmayı deneyin ve eğer bu bir UploadedFile örneğidir: https://docs.djangoproject.com/en/1.9/ref/files/uploads/#uploaded-files –
Bunun gibi görünüyor Bunu yapmanın en doğal yolu ol. Buna nasıl erişeceğimi/kullanacağımı bilmiyorum, "tür (request.FILES ['image']) == django.core.files.uploadedfile.UploadedFile" demek doğru mu yoksa isinstance (request.FILES ['image'], django.core.files.uploadedfile.UploadedFile) '? – dtgq