Mam to, co uważałem za proste pytanie. W moim modelu mam models.ImageField który wygląda tak:Python Django: Jak przesłać plik z nazwą pliku na podstawie instancji pk
class CMSDocument(BaseItem):
thumb = models.ImageField(upload_to= './media/',blank=True)
Ale chciałbym przesłać go do '.media/' + self.pk+ '.png'
Próbowałem zaktualizować pole wewnątrz metody ratowania modelu, ale to nie działa, ponieważ pk nie jest znany, gdy wywoływany jest "save". Próbowałem również dodać niestandardową funkcję upload_to zgodnie z sugestią tutaj: Django: Any way to change "upload_to" property of FileField without resorting to magic?. Ale to pozostawia puste pole. Co mogę zrobić?
EDIT: Używam Django 1.6
EDIT: Kiedyś sygnał post_save który nie jest bardzo ładny:
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()
...
spróbować tej http://stackoverflow.com/questions/651949/django-access-primary-key-in-models-filefieldupload-to-location – madzohan
bardzo hackowskim podejściem jest, w metodzie save, pobranie ostatniego identyfikatora rekordu, a następnie zwiększenie go o jeden i użycie go jako nowego identyfikatora. – Ymartin
hmmm, faktycznie skończyłem używać sygnału post_save, który jest trochę hackem (sprawdzam, czy nazwa pliku jest już poprawna, jeśli nie, zmienię go i zapiszę model, w ten sposób nie będę miał problemów z rekurencją). Ale sprawdzę rozwiązanie @madzohan. – Magda