Basit bir soru olarak kabul ettiğim şeylere sahibim. Benim modelde böyle görünen bir models.ImageField vardır:Python Django: Bir örneğe bağlı olarak bir dosya adı nasıl yüklenir pk
class CMSDocument(BaseItem):
thumb = models.ImageField(upload_to= './media/',blank=True)
Ama '.media/' + self.pk+ '.png'
yüklemek istiyorum ben modelinin tasarruf yöntemi içinde alanını güncellemek için çalıştı, ama bu işe yaramazsa, 'save' çağrıldığında pk bilinmediğinden. Ayrıca burada önerildiği gibi upload_to için özel bir işlev eklemeyi denedim: Django: Any way to change "upload_to" property of FileField without resorting to magic?. Ama bu sadece alanı boş bırakır. Ne yapabilirim?
DÜZENLEME: Django 1.6
EDIT kullanın: Eğer modeline kadar beklemek zorunda
def video_embed_post_save(sender, instance=False, **kwargs):
document = DocumentEmbedType.objects.get(pk=instance.pk)
new_thumb = "media/%s.png" % (document.pk,)
if not document.thumb == new_thumb:
document.thumb = new_thumb
document.save()
...
deneyin bu http://stackoverflow.com/questions/651949/django-access-primary-key-in-models-filefieldupload-to-location – madzohan
Çok çirkin bir yaklaşım, kaydetme yönteminde, son kaydın kimliğini alır ve bunu birer birer artırır ve yeni kimlik olarak kullanır. – Ymartin
hmmm, aslında bir kesmek bir bit bir post_save sinyali kullanmak için sona erdi (Ben dosya adı zaten doğru olup olmadığını, eğer ben değiştirmek ve modelini kaydetmek değilse, bu şekilde özyinelemeyle sorun alamıyorum)). Ama ben @madzohan çözümünü kontrol edeceğim. – Magda