在SQL DB中输入数据时出错

时间:2011-12-01 15:29:42

标签: django-models

这应该很简单。我收到一个我不明白的错误。我想我需要用空值预填充数据库来解决这个问题,但我不清楚是否是这种情况。我收到以下错误,我不理解......的含义。

无法添加“”:实例在数据库“无”上,值在数据库“默认”

models.py具有以下定义......

class Tag(models.Model):
    name = models.CharField(max_length = "20", primary_key = True)

class Page(models.Model): 
    name = models.CharField(max_length="45", primary_key = True) 
    content = models.TextField(blank=True)
    pub_date = models.DateTimeField('date published')
    tags = models.ManyToManyField(Tag)
    def __unicode__(self):
        return self.name

无法渲染的视图是......

def save_page(request, page_name):
    date =  datetime.date.today()
    content = request.POST["content"]
    tag_list = []
    if "tags" in request.POST:
        tags = request.POST["tags"]
        tag_list = [Tag.objects.get_or_create(name=tag)[0] for tag in tags.split()]

    try:
        page = Page.objects.get(pk=page_name)
        page.content = content
        for tag in tag_list:
            page.tags.add(tag)

    except Page.DoesNotExist:
        page = Page(name=page_name, content = content, pub_date = date)
        for tag in tag_list:
            page.tags.add(tag)

    page.save()
    return HttpResponseRedirect("/wikicamp/page/" + page_name +"/")

回溯:

Environment:


Request Method: POST
Request URL: http://localhost:8080/wikicamp/page/Start/save/

Django Version: 1.3.1
Python Version: 2.7.2
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'wikicamp.wiki',
 'django.contrib.admin']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')


Traceback:
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "D:\web dev\training\Django\secondproj\wikicamp\..\wikicamp\wiki\views.py" in save_page
  80.           page.tags.add(tag)
File "C:\Python27\lib\site-packages\django\db\models\fields\related.py" in add
  503.                 self._add_items(self.source_field_name, self.target_field_name, *objs)
File "C:\Python27\lib\site-packages\django\db\models\fields\related.py" in _add_items
  563.                                                (obj, self.instance._state.db, obj._state.db))

Exception Type: ValueError at /wikicamp/page/Start/save/
Exception Value: Cannot add "<Tag: Tag object>": instance is on database "None", value is on database "default"

1 个答案:

答案 0 :(得分:0)

您使用的是router吗?我认为您的路由器设置配置错误。看起来Django认为您添加的Page实例和Tag实例与相同的数据库源没有关联。这可以在路由器中设置。