Porównaj ceny domen i usług IT, sprzedawców z całego świata

Administrator Django TabularInline - czy istnieje dobry sposób na dodanie niestandardowej kolumny html?


Mam model (
Entry
), który zawiera prostą właściwość:
@property
def image(self):
return str(self.id)+"_"+self.round.season.name+"_"+self.round.theme+"_"+self.person.name

Używam tego do zbudowania nazwy konkretnego pliku obrazu na dysku. Więc wiem, że będzie obraz w
/path/to/images/(model.image()).jpg
Mogę wyświetlić samą właściwość surowego obrazu w układzie TabularInline na stronie administratora, dodając ją do kolekcji readonly_fields, ale jak mam uzyskać kolumnę, która miała niestandardowy kod HTML zawinięty wokół właściwości modelu?
dawny.
<img src="/images/{{model.image}}.jpg"/>

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Możesz utworzyć metodę w podklasie
TabularInline
, która zwraca żądany kod HTML, a następnie użyć nazwy tej metody zamiast
image
w
ImageInline
.
pola
: [/code]
from django.utils.safestring import mark_safeclass ImageInline(admin.TabularInline):
...
fields = (..., 'render_image')
readonly_fields = (..., 'render_image') def render_image(self, obj):
return mark_safe("""<img src="/images/%s.jpg"/>""" % obj.image)
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Zgodnie z bieżącym Django 1.2+ otrzymałem formularz błędów "nie ma takiego pola, jak render_image". Rozwiązanie Proste: Umieść funkcję render_image w modelu
class OfferPropertyInline(admin.TabularInline):
model = OfferProperty
fields=('property_value',)
readonly_fields = ('property_value',)class OfferAdmin(admin.ModelAdmin):
inlines = [
OfferPropertyInline
] def property_value(self,obj):
return obj.get_value()admin.site.register(Offer, OfferAdmin)
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Odpowiedź Lochupa nie działa dla mnie, używam Django 1.11.7. Znalazłem sposób na obejście tego.
Powiedzmy, że mam 2 tabele:

kampania i artykuł
, w jednej kampanii jest wiele artykułów. Chcę wyświetlać artykuły, gdy przeglądam określoną kampanię.
Tabela artykułów ma kolumnę o nazwie

score

który płynie. Chcę go zaokrąglić do 2 miejsc dziesiętnych podczas oglądania w Django Admin.
Ten przykład pokazuje, jak możesz utworzyć niestandardową kolumnę dla

TabularInline

w Django admin.
class Article(models.Model):
title = models.TextField(null=False)
url = models.TextField()
score = models.FloatField(null=True) def __str__(self):
return self.title def display_score(self):
if self.score:
return round(self.score, 2)
return self.score display_score.short_description = 'Score'class ArticleInline(admin.TabularInline):
model = Article
readonly_fields = ('title', 'url', 'display_score')
fields = ('title', 'url', 'display_score')class CampaignAdmin(admin.ModelAdmin):
inlines = [ArticleInline]admin.site.register(Campaign, CampaignAdmin)
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

@lechup jest poprawne, ale potrzebujesz:
readonly_fields = ('mycustomfield',)

zdefiniowane w Inline dla późniejszych wersji django (+1.4)

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się