Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Django - Foreign Key - Admin.py

0 votes

J'ai actuellement :

class Sheet_Price(models.Model):
    auteur =  models.CharField(max_length=15)
    date =  models.DateField(max_length=15, blank=True, null=True)
    current =  models.BooleanField(max_length=15)
    archive_date =  models.DateField(max_length=15, blank=True, null=True)


    def __int__(self):
        return self.id

class Element(models.Model):
    name = models.CharField(max_length=15)
    reference = models.CharField(max_length=15)
    front_price = models.FloatField(max_length=200)
    recurrent_price = models.FloatField(max_length=10)
    id_sheet_price = models.ForeignKey(Sheet_Price, on_delete=models.CASCADE)

Dans la page d'administration je récupère les informations de ces classes

class Sheet_Price_Admin(admin.ModelAdmin):
    list_display = ('auteur','date','current', 'archive_date')
    ordering = ('date', 'current',)

class Element_Admin(admin.ModelAdmin):
    list_display = ('name','reference','front_price', 'recurrent_price','id_sheet_price')
    ordering = ('id_sheet_price', 'id', )

A l'affichage (dans la page d'administration) je récupère toutes les informations mais le champs 'id_sheet_price 'Sheet_Price object'. Comment puis-je afficher l'id à la place ?

demandé 7-Jun-2016 par anonyme
edité 7-Jun-2016 par foxmask

1 Réponse

0 votes
 
Meilleure réponse

Ajoute la méthode __str__ dans ton model Sheet_Price

class Sheet_Price(models.Model):
    auteur =  models.CharField(max_length=15)
    date =  models.DateField(max_length=15, blank=True, null=True)
    current =  models.BooleanField(max_length=15)
    archive_date =  models.DateField(max_length=15, blank=True, null=True)

    def __str__(self):
        return self.id

    def __int__(self):
        return self.id
répondu 7-Jun-2016 par vmonte (196 points)
edité 7-Jun-2016 par foxmask

J'ai suivi ton idée, mais je me retrouve avec l'erreur suivante :

__str__ returned non-string (type int)

Plutot :

def __str__(self):
    return str(self.id)
class Sheet_Price(models.Model):
    auteur =  models.CharField(max_length=15)
    date =  models.DateField(max_length=15, blank=True, null=True)
    current =  models.BooleanField(max_length=15)
    archive_date =  models.DateField(max_length=15, blank=True, null=True)

    def __str__(self):
        return str(self.id)

https://docs.python.org/2/library/functions.html#str

...