2009-10-29 5 views
3

Tenez compte des modèles Django suivants:Django 1.1 formes, des modèles et des champs qui se cachent

class Host(models.Model): 
    # This is the hostname only 
    name = models.CharField(max_length=255) 

class Url(models.Model): 
    # The complete url 
    url = models.CharField(max_length=255, db_index=True, unique=True) 
    # A foreign key identifying the host of this url 
    # (e.g. for http://www.example.com/index.html it will 
    # point to a record in Host containing 'www.example.com' 
    host = models.ForeignKey(Host, db_index=True) 

J'ai aussi cette forme:

class UrlForm(forms.ModelForm): 
    class Meta: 
     model = Urls 

Le problème est le suivant: je veux calculer la valeur de le champ hôte automatiquement, donc je ne veux pas qu'il apparaisse sur le formulaire HTML affiché dans la page Web.

Si j'utilise 'exclude' pour omettre ce champ du formulaire, comment puis-je utiliser le formulaire pour enregistrer les informations dans la base de données (qui nécessite la présence du champ host)?

Répondre

3

Utilisation commit=False:

result = form.save(commit=False) 
result.host = calculate_the_host_from(result) 
result.save() 
1

Vous pouvez utiliser exclude puis dans les formulaires "clean" définir ce que vous voulez.

donc dans votre formulaire:

class myform(models.ModelForm): 
    class Meta: 
     model=Urls 
     exclude= ("field_name") 
    def clean(self): 
     self.cleaned_data["field_name"] = "whatever" 
     return self.cleaned_data