首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在django中运行syncdb时找不到关系

在django中运行syncdb时找不到关系
EN

Stack Overflow用户
提问于 2012-09-22 03:08:42
回答 1查看 1.3K关注 0票数 2

我的django应用程序的models.py中有这些类,我使用PostgreSQL8.3作为数据库

代码语言:javascript
复制
class Course(models.Model):
    students = models.ManyToManyField(User)
    title = models.CharField(max_length=200)
    description = models.TextField()

    def __unicode__(self):
        return self.title

    class Meta:
        verbose_name_plural="Courses"

class CourseChoicesForm(forms.Form):
    courseoption = forms.ChoiceField(choices=[(x.id,x.title) for x in Course.objects.all()])

当我运行python manage.py syncdb时,我得到一个错误,即relation course is not found

代码语言:javascript
复制
...
File "/home/me/Django-1.4/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/home/me/dev/python/django/myprj/myapp/models.py", line 50, in <module>
    class CourseChoicesForm(forms.Form):
  File "/home/me/dev/python/django/myprj/myapp/models.py", line 52, in CourseChoicesForm
    courseoption = forms.ChoiceField(choices=[(x.id,x.title) for x in Course.objects.all()])
...
File "/home/me/Django-1.4/django/db/backends/postgresql_psycopg2/base.py", line 52, in execute
    return self.cursor.execute(query, args)
django.db.utils.DatabaseError: relation "myapp_course" does not exist

更新:--我按以下方式解决了这个问题

代码语言:javascript
复制
class CourseChoicesForm(forms.Form):
    courseoption = forms.ChoiceField(choices=[],required=False)
    def __init__(self, *args, **kwargs):
        super(CourseChoicesForm, self).__init__(*args, **kwargs)
        self.fields['courseoption'].choices = [(x.id,x.title) for x in Course.objects.all()]

尽管如此,我还是不太清楚为什么这个行为occurred.Can的人请解释?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-22 04:04:04

在models.py文件中放置表单并不是很好的实践,这正是原因所在。

要运行syncdb,首先需要加载模型文件。当然,在进行任何数据库更新之前,都必须这样做。

现在,您的models.py文件还包括一个表单类,该类定义依赖于存在的表。(这只是Python工作方式的一部分-在导入模块时执行类定义)。因此,在添加表之前,syncdb必须加载一个模块,该模块要求表存在。

当您更改表单类时,您移动了依赖于新表的行--现在它位于__init__方法中。与类定义不同,该方法不会在导入时运行。只有在实际创建表单对象时,它才会运行。现在,syncdb可以导入您的新模块并更新数据库,一切都按其应有的方式工作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12540361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档