Ran*_*ana 3 django django-models
我有以下模型
from django.db import models
# Create your models here.
class Post(models.Model):
text = models.TextField()
def __str__(self):
return self.text[:50]
POWER_CHOICES= (('O', 'ON'),
('F','OFF')
)
STATE_CHOICES =(('AV','Available'),
('U','In Use '),
('NU','Do Not Use')
)
class Device(models.Model):
name = models.CharField(unique=True,max_length=50 )
ipaddress=models.ForeignKey('Ipaddress', on_delete=models.CASCADE,)
devicetype= models.ForeignKey('DeviceType', on_delete=models.CASCADE)
model= models.ForeignKey('DeviceModel', on_delete=models.CASCADE)
description= models.TextField(max_length=400)
location= models.ForeignKey('Location', on_delete=models.CASCADE)
group= models.ForeignKey('DeviceGroup', on_delete=models.CASCADE)
managment= models.CharField(max_length=100)
power= models.CharField(max_length=6, choices=POWER_CHOICES)
offtime= models.CharField(max_length=30)
state= models.CharField(max_length=10, choices=STATE_CHOICES)
user= models.CharField(max_length=100)
# department= models.ForeignKey('Department',on_delete=models.CASCADE)
comments= models.CharField(max_length=200)
def __unicode__(self):
return self.name[:50]
class DeviceType(models.Model):
name= models.CharField(max_length=100, unique=True)
def __unicode__(self):
return self.name[:50]
class DeviceModel(models.Model):
name= models.CharField(max_length=100, unique=True)
def __unicode__(self):
return self.name[:50]
class Ipaddress(models.Model):
address=models.CharField(max_length=20, unique=True)
owner=models.CharField(max_length=200)
loation=models.CharField(max_length=200)
note =models.TextField()
def __unicode__(self):
return self.address[:50]
class Department:
name= models.CharField(max_length=100, unique=True)
def __unicode__(self):
return self.name[:50]
class DeviceGroup:
name= models.CharField(max_length=100, unique=True)
def __unicode__(self):
return self.name[:50]
class Location:
description= models.CharField(max_length=100, unique=True)
def __unicode__(self):
return self.description[:50]
Run Code Online (Sandbox Code Playgroud)
我的管理页面如下所示:
from django.contrib import admin
from pages.models import Post, Device, DeviceType, DeviceModel, Ipaddress, DeviceGroup, Location
admin.site.register(Post)
admin.site.register(Device)
admin.site.register(DeviceType)
admin.site.register(DeviceModel)
admin.site.register(Ipaddress)
#admin.site.register(Department)
admin.site.register(DeviceGroup)
admin.site.register(Location)
Run Code Online (Sandbox Code Playgroud)
我看到以下错误,但不确定导致此错误的原因。有人可以给我一些想法。请
...
...
File "C:\Users\mohiuddin_rana\labmcproject\pages\admin.py", line 10, in <module>
admin.site.register(DeviceGroup)
File "C:\Users\mohiuddin_rana\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\contrib\admin\sites.py", line 102, in register
for model in model_or_iterable:
TypeError: 'type' object is not iterable
Run Code Online (Sandbox Code Playgroud)
Wil*_*sem 10
对于您的某些模型,您忘记将其从models.Model以下子类化:
class Department(models.Model):
name= models.CharField(max_length=100, unique=True)
def __unicode__(self):
return self.name[:50]
class DeviceGroup(models.Model):
name= models.CharField(max_length=100, unique=True)
def __unicode__(self):
return self.name[:50]
class Location(models.Model):
description= models.CharField(max_length=100, unique=True)
def __unicode__(self):
return self.description[:50]Run Code Online (Sandbox Code Playgroud)
这种变化也将导致一些迁移,因为到目前为止,Django的(可能)不明白,这些类实际上是模型,因此并没有构建数据库当量。
当您将模型注册到admin.site变量时,Django 需要一个模型,但检查失败。作为“回退”机制,它会检查您是否提供了可迭代的模型,但这又失败了,因为它只是一个“普通”类。
当我们检查函数 [GitHub]的源代码register(..)时,可以确认这种行为:
Run Code Online (Sandbox Code Playgroud)def register(self, model_or_iterable, admin_class=None, **options): # ... admin_class = admin_class or ModelAdmin if isinstance(model_or_iterable, ModelBase): model_or_iterable = [model_or_iterable] for model in model_or_iterable: # ... pass
(我删除了一些部分以使语义更清晰)。
如您所见,它会检查model_or_iterable您传递的是否是模型。如果是这种情况,它将它包装在一个列表中,否则它假定它是一个可迭代的,并旨在对其进行迭代。
注意:看起来您使用
__unicode__,但同时使用 Python-3.x。__unicode__据我所知,在 Python-3.x 数据模型中没有任何意义。你应该__str__改用。
| 归档时间: |
|
| 查看次数: |
3988 次 |
| 最近记录: |