我昨天第一次安装了Django并且今天认真地试了一下。我只打算将它用于漂亮的管理界面,其余的是Zend Framework。
我将现有的表格event
导入了管理员。没有需要加入。但主键不是'id',它被称为“事件”(在this naming convention之后)。我显然不希望此列的id#出现在数据输入表单中。
一切正常,除了添加新事件时,我点击保存并继续编辑,它会添加事件,但会将URL重定向到 http://127.0.0.1:8000/admin/events/event/None/ 并吐出此错误
ValueError at /admin/events/event/None/
invalid literal for int() with base 10: 'None'
这是我的models.py:
from django.db import models
class Event(models.Model):
event = models.IntegerField(primary_key=True)
title = models.CharField(max_length=150)
address_1 = models.CharField(max_length=150)
url = models.URLField(max_length=500,verify_exists=False)
start_date = models.DateField()
end_date = models.DateField()
ACTIVE_CHOICES = (
(0, 'InActive'),
(1, 'Active'),
)
active = models.CharField(max_length=1, default=1, choices=ACTIVE_CHOICES)
def __unicode__(self):
return self.title
class Meta:
db_table = u'event'
任何想法我做错了什么或如何解决这个问题?
答案 0 :(得分:5)
您可能希望PK为AutoField
而不是IntegerField
,因此Django会自动为您填写。否则你 在save方法或管理界面中自己做
class Event(models.Model):
event = models.AutoField(primary_key=True)
答案 1 :(得分:2)
这不是一个解决办法,但希望它可以帮助解决这种情况。
当您点击“保存并继续”时,在幕后发生的事情是有2个URL被访问...
/admin/events/event/add/
/admin/events/event/{id of newly created element}/
如果你看一下你得到的错误,那就是'窒息的'是'/ admin / events / event / None /'。注意id应该在哪里有'None'的值?这意味着当创建新记录时,它可能没有为'event'设置值(pk)。
如果您要检查SQL数据库,您可能会看到事件列为空。
Steve Losh刚刚发布了关于如何解决这个问题的代码(正如我输入的那样)所以我将在这里结束我的答案。