Comment définir les données initiales pour le modèle d'administration Django ajouter un formulaire d'instance?
Comment puis-je définir une valeur initiale d'un champ dans le formulaire automatique pour l'ajout d'un Django modèle de l'instance, avant que le formulaire est affiché? Je suis à l'aide de Django 1.3.1.
Mon modèle est le suivant:
class Foo(models.Model):
title = models.CharField(max_length=50)
description = models.TextField()
et l'admin, la forme est vraiment rien de spécial
class FooAdmin(admin.ModelAdmin):
ordering = ('title',)
Lorsque j'utilise l'admin de la page pour ajouter une nouvelle instance de Toto, je reçois un formulaire avec des champs vides pour le titre et la description. Ce que je voudrais, c'est que le champ de description est définie avec un modèle que j'ai obtenu par l'appel d'une fonction.
Ma meilleure tentative à obtenir, il est ceci:
def get_default_content():
return 'this is a template for a Foo description'
class FooAdminForm(django.forms.ModelForm):
class Meta:
model = Foo
def __init__(self, *args, **kwargs):
kwargs['initial'].update({'description': get_default_content()})
super(FooAdminForm, self).__init__(self, *args, **kwargs)
class FooAdmin(admin.ModelAdmin):
ordering = ('title',)
form = FooAdminForm
mais si j'essaie ce que je reçois cette Django erreur:
AttributeError at /admin/bar/foo/add/
'FooForm' object has no attribute 'get'
Request Method: GET
Request URL: http://localhost:8000/admin/bar/foo/add/
Django Version: 1.3.1
Exception Type: AttributeError
Exception Value: 'FooForm' object has no attribute 'get'
Exception Location: /www/django-site/venv/lib/python2.6/site-packages/django/forms/widgets.py in value_from_datadict, line 178
Je ne sais pas quel est le problème ici, et ce que je dois faire pour le faire fonctionner. Ce que je trouve aussi étrange à propos de cette erreur (en dehors du fait que je le vois) c'est qu'il n'y a pas de FooForm dans mon code?
source d'informationauteur Martijn de Milliano
Vous devez vous connecter pour publier un commentaire.
Vous devez inclure
self
comme premier argument dans votre__init__
définition de la méthode, mais ne devrait pas inclure lorsque vous appelez la super-classe de la méthode.Cela dit, un modèle de champ peut prendre un callable pour son par défautde sorte que vous pouvez ne pas avoir à définir un administrateur personnalisé forme à tous.
Alasdair l'approche est bonne, mais obsolète. Radev l'approche est très joli et comme mentionné dans le commentaire, il me semble qu'il n'y a rien à ce sujet dans la documentation.
En dehors de ceux qui, depuis Django 1.7 il y a une fonction
get_changeform_initial_data
dans ModelAdmin qui définit la forme initiale de valeurs:Plus de 3 ans plus tard,
Mais en fait, ce que vous devez faire est de remplacer admin.ModelAdmin formfield_for_dbfield .. comme ceci:
Acclamations;