使用django中的内联获取SystemCheckError,无法识别源

时间:2015-07-06 17:35:18

标签: python django django-models django-admin

对于我的生活,我找不到解决这个问题的方法,我真的不知道我对内联的错误。

我正在使用django 1.8以及django-nested-inline 0.3.4。

这是models.py文件的内容:

import datetime
from django.db import models
from django.db.models.fields import CharField, TextField, IntegerField
from django.utils import timezone

# lectura de sensor, no incluye datos, solo fecha y datos apuntan aquí
# también apunta a la pieza y el sensor asignado


class lectura(models.Model):
    lectura_nom = models.CharField(max_length = 20)
    sensor_asign = models.ForeignKey('sensor_asignado')
    pieza = models.ForeignKey('pieza')

    verificacion = models.BooleanField()
    fecha_hora = models.DateTimeField()

    def __str__(self):
        return self.lectura_nom

    def lectura_de_hoy(self):
        return self.fecha_hora >= timezone.now() - datetime.timedelta(days=1)

# pieza asignada al sensor, cambia de acuerdo a hroario de produccion
class pieza(models.Model):
    pieza_nom = models.CharField(max_length = 20)
    paquete =models.ForeignKey('paquete')
    ultima = models.BooleanField()
    no_de_seq = models.IntegerField()
    description= models.TextField()

    def __str__(self):
        return self.pieza_nom

# paquetes incluyen puras piezas únicas al paquete
class paquete(models.Model):
    paquete_nom = models.CharField(max_length = 20)
    no_de_piezas = models.IntegerField()
    no_de_medibles = models.IntegerField()

    def __str__(self):
        return self.paquete_nom


#lugar donde se encuentra el rack, importante para permisos de usuario
class area(models.Model):
    area_nom = models.CharField(max_length = 20)
    description = models.TextField()

    def __str__(self):
        return self.area_nom

# rack del cual fue sacada la pieza    
class linea(models.Model):
    linea_nom = models.CharField(max_length = 20)
    area = models.ForeignKey('area')
    description = models.TextField()

    def __str__(self):
        return self.linea_nom

# sensor del cual se sacó la lectura
class sensor_asignado(models.Model):
    sensor_nom = models.CharField(max_length = 20)
    linea = models.ForeignKey('linea')
    sensor_tipo = models.ForeignKey('tipo_de_sensor')

    def __str__(self):
        return self.sensor_nom

# sensor puede incluir varias configuraciones de envio de datos    
class tipo_de_sensor(models.Model):
    tipo_de_sen_nom = models.CharField(max_length = 20)
    descripcion=models.TextField()

    def __str__(self):
        return self.tipo_de_sen_nom

# diferentes datos para el sensor de tipo especificado anteriormente
# cada dato apunta hacia una lectura    
class salidas_de_sensor(models.Model):
    salida_nom = CharField(max_length = 20)
    descripcion = models.TextField()

    def __str__(self):
        return self.salida_nom

class datos_o(models.Model):
    dato_no = IntegerField(primary_key = True)
    salida_de_sensor = models.ForeignKey('salidas_de_sensor')
    lectura = models.ForeignKey('lectura')

    def __str__(self):
        r_string = str(self.dato_no)
        return r_string

# advertencias, apunta a un tipo y una lectura
class adv(models.Model):
    adv_no = IntegerField(primary_key=True)
    lectura = models.ForeignKey('lectura')
    adv_tipo = models.ForeignKey('adv_tipo')

    def __str__(self):
        adv_string = str(self.adv_no)
        return adv_string

# diferentes tipo de advertencias posibles
class adv_tipo(models.Model):
    adv_tip = CharField(max_length = 20)
    descrip_adv = TextField()

    def __str__(self):
        return self.adv_tip

这是我的admin.py文件的内容:

from django.contrib import admin
from nested_inline.admin import NestedStackedInline, NestedModelAdmin
from mainscreen.models import *

class AreaInline(NestedStackedInline):
    model = area
    extra = 1
    fk_name = area

class LineaInLine(NestedStackedInline):
    model = linea
    extra = 1
    fk_name = linea
    inlines = [AreaInline]

class SensorInLine(NestedModelAdmin):
    model = sensor_asignado
    inlines = [LineaInLine]


    admin.site.register(lectura)
admin.site.register(sensor_asignado, SensorInLine)
admin.site.register(salidas_de_sensor)
admin.site.register(pieza)
admin.site.register(paquete)
admin.site.register(area)
admin.site.register(linea)
admin.site.register(tipo_de_sensor)
admin.site.register(adv)
admin.site.register(adv_tipo)
admin.site.register(datos_o)

这是我得到的错误:

Performing system checks...

SystemCheckError: System check identified some issues:

ERRORS:
<class 'mainscreen.admin.LineaInLine'>: (admin.E202) 'mainscreen.linea' has no field named '<class 'mainscreen.models.linea'>'.

System check identified 1 issue (0 silenced).

无论如何,如果有人能找到解决这个问题的方法,我会非常感激。

祝你有个美好的一天。

编辑:

好的,现在我完全有另一个问题,我认为这更像是一个设计问题。

我希望信息在管理员中显示的方式是:

when a new Sensor Asignado is created, have the option to choose from a drop downn menu in the following order of hierarchy:
    Area
    Linea (filtered by Area chosen)
    Sensor (Filtered by Linea chosen)

再一次,我一直在努力试图让自己暂时保持正确,并且非常感谢任何帮助。

谢谢你,祝你有愉快的一天。

1 个答案:

答案 0 :(得分:1)

尝试使用fk_name的字符串:

fk_name = 'linea'

另外,我建议您使用Django约定,并将模型命名为SensorAsignadoLinea,而不是sensor_asignadolinea。它将使您的代码更容易理解其他Django用户。