Entonces obtuve 4 tablas en una base de datos MySQL. La base de datos se administra con Django bajo una aplicación que creé con Django. Aquí hay 2 de las 4 clases en el archivo models.py correspondientes a las tablas de la base de datos:

from __future__ import unicode_literals

from django.db import models

class Pdb(models.Model):
    id_pdb_chain = models.CharField(db_column='id_PDB_chain', primary_key=True, max_length=5)  # Field name made lowercase.
    id_pdb = models.CharField(db_column='id_PDB', max_length=4)  # Field name made lowercase.
    chaine = models.CharField(max_length=10)
    header = models.CharField(max_length=255)
    sequence_proteine = models.TextField(db_column='sequence_Proteine')  # Field name made lowercase.
    start_seq = models.IntegerField()
    taille_proteine = models.IntegerField(db_column='taille_Proteine')  # Field name made lowercase.
    resolution_pdb = models.FloatField(db_column='resolution_PDB')  # Field name made lowercase.
    meth_res = models.ForeignKey('MethodesRes', models.DO_NOTHING, db_column='meth_Res')  # Field name made lowercase.

    def __unicode__(self):
        return self.id_pdb

    class Meta:
        managed = False
        db_table = 'PDB'

class StructSec(models.Model):
    id_struct_sec = models.AutoField(primary_key=True)
    start_pred = models.IntegerField()
    structure_predite = models.TextField(db_column='structure_Predite')  # Field name made lowercase.
    nombre_ppii = models.IntegerField(db_column='nombre_PPII')  # Field name made lowercase.
    pourcentage_ppii = models.FloatField(db_column='pourcentage_PPII')  # Field name made lowercase.
    angle_phi = models.TextField()
    angle_psi = models.TextField()
    id_pdb_chain = models.ForeignKey(Pdb, models.DO_NOTHING, db_column='id_PDB_chain')  # Field name made lowercase.
    nom_analyse = models.ForeignKey(MethodesAnalyse, models.DO_NOTHING, db_column='nom_Analyse')  # Field name made lowercase.

    def __unicode__(self):
        return self.structure_predite

    class Meta:
        managed = False
        db_table = 'struct_sec'

Como puede ver, ya encontré una manera de mostrar un campo para cada tabla en la página de administración con esta parte en cada tabla:

def __unicode__(self):
    return self.structure_predite

Pero cuando quiero reemplazar "structure_predite" esto por la clave primaria en la clase "StructSec" de esta manera:

def __unicode__(self):
    return self.id_struct_sec

Django devuelve este error:

TypeError: coercing to Unicode: need string or buffer, long found

También tengo que mencionar que he realizado algunas modificaciones en el archivo "admin.py" aquí está:

from django.contrib import admin

from .models import Pdb, MethodesAnalyse, MethodesRes, StructSec


class PdbInline(admin.TabularInline):
    model = Pdb

class PdbAdmin(admin.ModelAdmin):
    list_display = ('id_pdb','header','chaine','taille_proteine','meth_res')
    list_filter = ['chaine','meth_res']
    search_fields = ['id_pdb_chain','header']


class MethodesAnalyseInline(admin.TabularInline):
    model = MethodesAnalyse

class MethodesAnalyseAdmin(admin.ModelAdmin):
    list_display = ('nom_analyse')


class MethodesResInline(admin.TabularInline):
    model = MethodesRes

class MethodesResAdmin(admin.ModelAdmin):
    list_display = ('meth_res')


class StructSecInline(admin.TabularInline):
    model = MethodesRes

class StructSecAdmin(admin.ModelAdmin):
    list_display = ('id_struct_sec','nombre_PPII','pourcentage_PPII','id_PDB','nom_Analyse')
    search_fields = ['nombre_ppii','pourcentage_ppii']


admin.site.register(Pdb,PdbAdmin)
admin.site.register(MethodesAnalyse)
admin.site.register(MethodesRes)
admin.site.register(StructSec)

Sabiendo esto, mi pregunta es simple: ¿Cómo mostrar el ID de incremento automático (Clave primaria) de la clase StructUre en la tabla de administración correspondiente sin errores?

0
Yoann Pageaud 6 abr. 2017 a las 12:30

2 respuestas

La mejor respuesta

La respuesta de Sijan es correcta, solo agregaré eso, para que los enlaces funcionen, es posible que también tenga que hacer esto:

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

Sin el "str ()" en la devolución, los enlaces no funcionan y devuelven errores al hacer clic.

0
Yoann Pageaud 6 abr. 2017 a las 11:20

Creo que el error está aumentando debido al valor Ninguno. Python no puede convertir ninguno.

Reemplace su definición Unicode a 'str' como:

 def __str__(self):
      return self.id_struct_sec
0
Sijan Bhandari 6 abr. 2017 a las 09:37