2010-12-02 23 views
0

Ceci est mon modèleForeignKey retourne id lors de la modification de la forme

class Category(models.Model): 
    title = models.ForeignKey(Title, verbose_name="Title") 
    class Meta: 
     ordering = ['title'] 
    def __unicode__(self): 
     return self.title.title

J'utilise un formulaire pour remplacer le champ ForegnKey par un CharField

class CategoryForm(forms.ModelForm): 
    title = forms.CharField(label = "Title") 
    class Meta: 
     model = Category 

class CategoryAdmin(admin.ModelAdmin): 
    form = CategoryForm

Mon modèle Titre

class Title(models.Model): 
    title = models.CharField("Title", max_length=200) 

    def __unicode__(self): 
     return self.title

Tout fonctionne bien lorsque j'ajoute et j'affiche des catégories, mais lorsque j'essaie d'éditer une catégorie, j'obtiens l'identifiant ForeignKey dans le champ du titre. Je veux que ce soit la chaîne de titre. Tout moyen de le faire?

Merci beaucoup

+0

Pourquoi avez-vous un modèle avec un seul titre terrain? Pourquoi pas juste un titre models.CharField sur Category? –

+0

Le champ de titre est juste un exemple. Je l'utilise comme clé étrangère car elle sera utilisée par d'autres applications. Il y a plus de code dans le modèle mais j'envoie juste l'essentiel. Je vous remercie – bnabilos

Répondre

0

J'ai résolu cela en rendant le titre unique et en ajoutant l'option to_field à ForeignKey dans ma classe de catégorie. Voici le code:

class Title(models.Model): 
    title = models.CharField("Title", max_length=200, unique=True) 

    def __unicode__(self): 
     return self.title
class Category(models.Model): 
    title = models.ForeignKey(Title, verbose_name="Title", to_field='title') 

    class Meta: 
     ordering = ['title'] 

    def __unicode__(self): 
     return self.title.title

Merci

0

Je ne l'avais pas vérifier cette solution (je ne peux pas créer application de test maintenant) et je ne pas sûr que cela fonctionne.

Essayez d'ajouter exclude = ("title",) en tant que membre de CategoryForm. Aussi peut-être que vous devrez remplacer la méthode save() (et peut-être autre) de CategoryForm.