2014-03-05 38 views
1

這個問題是出於Django(1.3)tutorialchoice_set django教程第一部分

在choice_set命令和本教程中還有其他帖子,但他們沒有一個似乎有我遇到的問題。

在本教程的這一部分,我們將調查應用程序添加到mysite。試圖向「投票」問題添加選項時出現錯誤。它告訴我沒有稱爲'choice'的列,但models.py中有一個'Choice'類,並且它被導入。

代碼以下是其中產生的誤差:

p.choice_set.all() 

DatabaseError: no such column: polls_choice.choice 

但是雁應該僅僅是:

[] 

的mysite /調查/ models.py CODE:

from django.db import models 
import datetime 
# Create your models here. 

class Poll(models.Model): 
    question = models.CharField(max_length=200) 
    pub_date = models.DateTimeField('date published') 
    def __unicode__(self): 
     return self.question 
    def was_published_today(self): 
     return self.pub_date.date() == datetime.date.today() 

class Choice(models.Model): 
    poll = models.ForeignKey(Poll) 
    choice = models.CharField(max_length=200) 
    votes = models.IntegerField() 
    def __unicode__(self): 
     return self.choice 

如果您能提供任何建議,我會非常感謝您的努力。謝謝。

這裏是多頭形態,

03:30 ~ $ cd mysite                                        
03:30 ~/mysite $ python manage.py sql polls 
BEGIN; 
CREATE TABLE "polls_poll" (
    "id" integer NOT NULL PRIMARY KEY, 
    "question" varchar(200) NOT NULL, 
    "pub_date" datetime NOT NULL 
)                                            
;                                            
CREATE TABLE "polls_choice" (
    "id" integer NOT NULL PRIMARY KEY, 
    "poll_id" integer NOT NULL REFERENCES "polls_poll" ("id"), 
    "choice" varchar(200) NOT NULL, 
    "votes" integer NOT NULL 
)                                            
;                                            
COMMIT; 
03:30 ~/mysite $ python manage.py syncdb 
Creating tables ... 
Installing custom SQL ... 
Installing indexes ... 
No fixtures found. 
04:09 ~/mysite $ pyton manage.py sql polls                                  
bash: pyton: command not found 
04:10 ~/mysite $ python manage.py syncdb                                   
Creating tables ... 
Installing custom SQL ... 
Installing indexes ... 
No fixtures found. 
04:11 ~/mysite $ python manage.py sql polls 
BEGIN; 
CREATE TABLE "polls_poll" (
    "id" integer NOT NULL PRIMARY KEY, 
    "question" varchar(200) NOT NULL, 
    "pub_date" datetime NOT NULL 
)                                            
;                                            
CREATE TABLE "polls_choice" (
    "id" integer NOT NULL PRIMARY KEY, 
    "poll_id" integer NOT NULL REFERENCES "polls_poll" ("id"), 
    "choice" varchar(200) NOT NULL, 
    "votes" integer NOT NULL 
)                                            
;                                            
COMMIT; 
04:23 ~/mysite $ python manage.py shell                                   
Python 2.7.5+ (default, Sep 19 2013, 13:48:49) 
Type "copyright", "credits" or "license" for more information. 

IPython 1.0.0 -- An enhanced Interactive Python. 
?   -> Introduction and overview of IPython's features. 
%quickref -> Quick reference. 
help  -> Python's own help system. 
object? -> Details about 'object', use 'object??' for extra details. 

In [1]: p= Poll.objects.all() 
--------------------------------------------------------------------------- 
NameError         Traceback (most recent call last) 
/usr/local/lib/python2.7/dist-packages/django/core/management/commands/shell.py in <module>() 
----> 1 p= Poll.objects.all() 

NameError: name 'Poll' is not defined 

In [2]: from polls.models import Poll, Choice                                 

In [3]: p=Poll.objects.all()                                      

In [4]: print p 
[<Poll: What's up?>, <Poll: What's up?>]                                   

In [5]: p=Poll.objects.get(pk=1)                                     
prin                                            
In [6]: print p 
What's up?                                          

In [7]: p.choice_set.all()                                      
Out[7]: --------------------------------------------------------------------------- 
DatabaseError        Traceback (most recent call last) 
/usr/local/lib/python2.7/dist-packages/django/core/management/commands/shell.py in <module>() 
----> 1 p.choice_set.all() 

/usr/local/lib/python2.7/dist-packages/IPython/core/displayhook.py in __call__(self, result) 
    245    self.start_displayhook() 
    246    self.write_output_prompt() 
--> 247    format_dict, md_dict = self.compute_format_data(result) 
    248    self.write_format_data(format_dict, md_dict) 
    249    self.update_user_ns(result) 

/usr/local/lib/python2.7/dist-packages/IPython/core/displayhook.py in compute_format_data(self, result) 
    155 
    156   """ 
--> 157   return self.shell.display_formatter.format(result) 
    158 
    159  def write_format_data(self, format_dict, md_dict=None): 

/usr/local/lib/python2.7/dist-packages/IPython/core/formatters.py in format(self, obj, include, exclude) 
    150    md = None 
    151    try: 
--> 152     data = formatter(obj) 
    153    except: 
    154     # FIXME: log the exception 

/usr/local/lib/python2.7/dist-packages/IPython/core/formatters.py in __call__(self, obj) 
    479     type_pprinters=self.type_printers, 
    480     deferred_pprinters=self.deferred_printers) 
--> 481    printer.pretty(obj) 
    482    printer.flush() 
    483    return stream.getvalue() 

/usr/local/lib/python2.7/dist-packages/IPython/lib/pretty.py in pretty(self, obj) 
    360        if callable(meth): 
    361         return meth(obj, self, cycle) 
--> 362    return _default_pprint(obj, self, cycle) 
    363   finally: 
    364    self.end_group() 

/usr/local/lib/python2.7/dist-packages/IPython/lib/pretty.py in _default_pprint(obj, p, cycle) 
    480  if getattr(klass, '__repr__', None) not in _baseclass_reprs: 
    481   # A user-provided repr. 
--> 482   p.text(repr(obj)) 
    483   return 
    484  p.begin_group(1, '<') 

/usr/local/lib/python2.7/dist-packages/django/db/models/query.py in __repr__(self) 
    67 
    68  def __repr__(self): 
---> 69   data = list(self[:REPR_OUTPUT_SIZE + 1]) 
    70   if len(data) > REPR_OUTPUT_SIZE: 
    71    data[-1] = "...(remaining elements truncated)..." 

/usr/local/lib/python2.7/dist-packages/django/db/models/query.py in __len__(self) 
    82     self._result_cache = list(self.iterator()) 
    83   elif self._iter: 
---> 84    self._result_cache.extend(self._iter) 
    85   return len(self._result_cache) 
    86 

/usr/local/lib/python2.7/dist-packages/django/db/models/query.py in iterator(self) 
    271   model = self.model 
    272   compiler = self.query.get_compiler(using=db) 
--> 273   for row in compiler.results_iter(): 
    274    if fill_cache: 
    275     obj, _ = get_cached_row(model, row, 

/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py in results_iter(self) 
    678   fields = None 
    679   has_aggregate_select = bool(self.query.aggregate_select) 
--> 680   for rows in self.execute_sql(MULTI): 
    681    for row in rows: 
    682     if resolve_columns: 

/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py in execute_sql(self, result_type) 
    733 
    734   cursor = self.connection.cursor() 
--> 735   cursor.execute(sql, params) 
    736 
    737   if not result_type: 

/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py in execute(self, sql, params) 
    32   start = time() 
    33   try: 
---> 34    return self.cursor.execute(sql, params) 
    35   finally: 
    36    stop = time() 

/usr/local/lib/python2.7/dist-packages/django/db/backends/sqlite3/base.py in execute(self, query, params) 
    232   query = self.convert_query(query) 
    233   try: 
--> 234    return Database.Cursor.execute(self, query, params) 
    235   except Database.IntegrityError, e: 
    236    raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2] 

DatabaseError: no such column: polls_choice.choice 

In [8]: 
+0

見http://stackoverflow.com/questions/2048777/django-tutorial-what-is-choice-set – dursk

+0

@ m1Lb4nKs這是一個很好的鏈接。 https://docs.djangoproject.com/en/1.3/topics/db/queries/#backwards-related-objects –

+1

您使用的是什麼RBDMS?手動進入並驗證您的'polls_choice'表是否確實具有「選擇」列是非常好的。 – dursk

回答

2

我得到它的工作。我在settings.py添加另一個層面到我的數據庫:

DATABASES = { 
    'default': { 
    'ENGINE': 'django.db.backends.sqlite3', 
    'NAME': '/home/JoeButy/mysite/polls/db.sqlite', 
    'USER': '', 
    'PASSWORD': '', 
    'HOST': '', 
    'PORT': '' 
    } 
} 

這是安裝位,我有:

INSTALLED_APPS = (
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    'mysite.polls', 
    'mysite.myapp', 
) 

感謝您的幫助。我希望別人可以從中學習!乾杯!

這裏是整個闌尾代碼:

06:15 ~ $ cd mysite             
06:16 ~/mysite $ python ./manage.py syncdb        
Creating tables ... 
Creating table auth_permission 
Creating table auth_group_permissions 
Creating table auth_group 
Creating table auth_user_user_permissions 
Creating table auth_user_groups 
Creating table auth_user 
Creating table auth_message 
Creating table django_content_type 
Creating table django_session 
Creating table django_site 
Creating table polls_poll 
Creating table polls_choice 

You just installed Django's auth system, which means you don't have an 
y superusers defined. 
Would you like to create one now? (yes/no): yes 
Username (Leave blank to use 'joebuty'): 
E-mail address: [email protected] 
Password: 
Password (again): 
Superuser created successfully. 
Installing custom SQL ... 
Installing indexes ... 
No fixtures found. 
06:17 ~/mysite $ python ./manage.py sql polls 
BEGIN; 
CREATE TABLE "polls_poll" (
    "id" integer NOT NULL PRIMARY KEY, 
    "question" varchar(200) NOT NULL, 
    "pub_date" datetime NOT NULL 
)                  
;                  
CREATE TABLE "polls_choice" (
    "id" integer NOT NULL PRIMARY KEY, 
    "poll_id" integer NOT NULL REFERENCES "polls_poll" ("id"), 
    "choice" varchar(200) NOT NULL, 
    "votes" integer NOT NULL 
)                  
;                  
COMMIT; 
06:17 ~/mysite $ python ./manage.py shell        
Python 2.7.5+ (default, Sep 19 2013, 13:48:49) 
Type "copyright", "credits" or "license" for more information. 

IPython 1.0.0 -- An enhanced Interactive Python. 
?   -> Introduction and overview of IPython's features. 
%quickref -> Quick reference. 
help  -> Python's own help system. 
object? -> Details about 'object', use 'object??' for extra details. 

In [1]: from polls.models import Poll, Choice 

In [2]: p=Poll.objects.get(pk=1) 
---------------------------------------------------------------------- 
-----                 
DoesNotExist        Traceback (most recent call 
last)                 
/usr/local/lib/python2.7/dist-packages/django/core/management/commands 
/shell.py in <module>()            
----> 1 p=Poll.objects.get(pk=1) 

/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py in 
get(self, *args, **kwargs) 
    130 
    131  def get(self, *args, **kwargs): 
--> 132   return self.get_query_set().get(*args, **kwargs) 
    133 
    134  def get_or_create(self, **kwargs): 

/usr/local/lib/python2.7/dist-packages/django/db/models/query.py in ge 
t(self, *args, **kwargs) 
    347   if not num: 
    348    raise self.model.DoesNotExist("%s matching query d 
oes not exist."              
--> 349      % self.model._meta.object_name) 
    350   raise self.model.MultipleObjectsReturned("get() return 
ed more than one %s -- it returned %s! Lookup parameters were %s"  
    351     % (self.model._meta.object_name, num, kwargs)) 

DoesNotExist: Poll matching query does not exist. 

In [3]: p=Poll.objects.all()           

In [4]: print p 
[]                  

In [5]: p =Poll(question="What''s up?", pub_date=datetime.datetime.now 
()) 
---------------------------------------------------------------------- 
-----                 
NameError         Traceback (most recent call 
last)                 
/usr/local/lib/python2.7/dist-packages/django/core/management/commands 
/shell.py in <module>()            
----> 1 p =Poll(question="What''s up?", pub_date=datetime.datetime.now 
())                 

NameError: name 'datetime' is not defined 

In [6]: import datetime 

In [7]: p =Poll(question="What''s up?", pub_date=datetime.datetime.now 
())                 

In [8]: print p 
What''s up?               

In [9]: p.save() 

In [10]: p=Poll.objects.get(pk=1) 

In [11]: p.was_published_today() 
Out[11]: True 

In [12]: p.choice_set.all() 
Out[12]: [] 

In [13]: p.choice_set.create(choice="Not much", votes=0) 
Out[13]: <Choice: Not much> 

In [14]: p.choice_set.create(choice="The Sky", votes=0)    
Out[14]: <Choice: The Sky> 

In [15]: p.choice_set.create(choice="Best Web App Ever!", votes=0)  
Out[15]: <Choice: Best Web App Ever!> 

In [16]: c.poll 
---------------------------------------------------------------------- 
-----                 
NameError         Traceback (most recent call 
last)                 
/usr/local/lib/python2.7/dist-packages/django/core/management/commands 
/shell.py in <module>()            
----> 1 c.poll 

NameError: name 'c' is not defined 

In [17]: p.choice_set.all() 
Out[17]: [<Choice: Not much>, <Choice: The Sky>, <Choice: Best Web App 
Ever!>]                

In [18]: p.choice_set.count()           
Out[18]: 3 

In [19]: Choice.objects.filter(poll__pub_date__year=2014)    
Out[19]: [<Choice: Not much>, <Choice: The Sky>, <Choice: Best Web App 
Ever!>]                

In [20]: c.save() 
---------------------------------------------------------------------- 
-----                 
NameError         Traceback (most recent call 
last)                 
/usr/local/lib/python2.7/dist-packages/django/core/management/commands 
/shell.py in <module>()            
----> 1 c.save() 

NameError: name 'c' is not defined 

In [21]: