W moim modelu UserProfile chciałbym mieć funkcję, która zwraca albo użytkownika ImageFileField
przedmiot lub domyślnego obrazu, jeśli użytkownik nie dodał własne.Tworzenie i powrócić do domyślnego ImageFieldFile od wewnątrz funkcji
Na przykład:
class UserProfile(models.Model):
pic = models.ImageField('Headshot',blank=True,
upload_to=get_path_and_filename)
def get_pic(self):
if self.pic:
return self.pic
else:
# return ImageFileField with a default value
chcę wrócić równoważny ImageFileField
bo mam filtrów, które współpracują z tego typu obiektu (tak, nie mogę po prostu przekazać go ciąg, łatwo) ... Próbowałem patrząc na source code, ale nie wiem, jak to zrobić.
Czy istnieje łatwy sposób na zainicjowanie nowego obiektu ImageFileField
, przekazując mu ścieżkę do pliku obrazu, a następnie go zwróci?
PS: myślałem o użyciu ustawienie domyślne dla ImageField, jednak wydaje się mniej elastyczne, ponieważ plik jest przechowywany na stworzeniu modelu ... i jeśli później chcesz zmienić domyślny plik, Musiałbym zaktualizować wszystkie wpisy bazy danych, które miały stary plik.
Masz rację, to była literówka dysleksję z mojej strony (spójne, choć , Mógłbym dodać). Po prostu użyję funkcji 'get_pic' w moich szablonach ... mam nadzieję, że to nie będzie zbyt" niebezpieczne ". Mam zamiar spróbować jutro. Wygląda na to, że zrobi to, co chcę. Nie zdawałem sobie sprawy, że poszczególne pola mogą być 'save()' lub 'delete()' ... ucz się czegoś każdego dnia! Dziękuję Ci. – thornomad
Wygląda na to, że powinien działać, ale pojawia się błąd: Plik "/usr/lib/python2.5/site-packages/django/db/models/fields/files.py", wiersz 23, w __init__ self.storage = field.storage AttributeError: Obiekt "NoneType" nie ma atrybutu "storage" Jeśli zmienię to na 'field = self.pic', to działa poprawnie; Próbowałem przekazać mu pusty obiekt ImageField, ale to nie zadziałało. Nie jestem pewien, czy to jest dobre, ale działa. – thornomad
Och, zgadza się. Skłamałem, nie możesz użyć ImageFieldFile właśnie tak. Edytuję odpowiedź ... – SmileyChris