new installations tryout problem

51 views
Skip to first unread message

Elim Qiu

unread,
Jun 26, 2015, 1:24:35 AM6/26/15
to django...@googlegroups.com
Installed django recently, followed the django tutorial pdf to some
where arround page 20. But got problems...

It's on ubuntu 14.04, I have ipython installed and the following command
some how brings up ipython. And it will raise exception for command
Question.objects.filter(question_text__startswith='What')

I have to do double quotes instead:
Question.objects.filter(question_text__startswith="What")

But now I encountered the following error and need your help:

elim@aLnx:mydjango$ python manage.py shell
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
Type "copyright", "credits" or "license" for more information.

IPython 1.2.1 -- 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]: import django

In [2]: django.setup()

In [3]: from polls.models import Question, Choice

In [4]: Question.objects.all()
Out[4]: [<Question: What's up?>]

In [5]: from django.utils import timezone

In [6]: Question.objects.filter(id=1)
Out[6]: [<Question: What's up?>]

In [7]: Question.objects.filter(question_text__startswith="What")
Out[7]: [<Question: What's up?>]

In [8]: # Due to ipython instead of python shell, we need "What" instead
of 'What'

In [9]: this_year = timezone.now().year

In [10]: this_year
Out[10]: 2015

In [11]: Question.objects.get(pub_date__year=this_year)
Out[11]: <Question: What's up?>

In [12]: # Question.objects.get(id=2) will raise: Traceback (most recent
call last):

In [13]: # ...

In [14]: # DoesNotExist: Question matching query does not exist.

In [15]: Question.objects.get(id=1)
Out[15]: <Question: What's up?>

In [16]: Question.objects.get(pk=1)
Out[16]: <Question: What's up?>

In [17]: q = Question.objects.get(pk=1)

In [18]: q.was_published_recently()
Out[18]: False

In [19]: q
Out[19]: <Question: What's up?>

In [20]: # What False (In[18]) ?

In [21]: q.choice_set.all()
Out[21]: []

In [22]: q.choice_set.create(choice_text='Not much', votes=0)
---------------------------------------------------------------------------
IntegrityError Traceback (most recent call last)
<ipython-input-22-eb4d4c16acae> in <module>()
----> 1 q.choice_set.create(choice_text='Not much', votes=0)

/usr/local/lib/python2.7/dist-packages/django/db/models/fields/related.pyc
in create(self, **kwargs)
748 kwargs[rel_field.name] = self.instance
749 db = router.db_for_write(self.model,
instance=self.instance)
--> 750 return super(RelatedManager,
self.db_manager(db)).create(**kwargs)
751 create.alters_data = True
752

/usr/local/lib/python2.7/dist-packages/django/db/models/manager.pyc in
manager_method(self, *args, **kwargs)
125 def create_method(name, method):
126 def manager_method(self, *args, **kwargs):
--> 127 return getattr(self.get_queryset(), name)(*args,
**kwargs)
128 manager_method.__name__ = method.__name__
129 manager_method.__doc__ = method.__doc__

/usr/local/lib/python2.7/dist-packages/django/db/models/query.pyc in
create(self, **kwargs)
346 obj = self.model(**kwargs)
347 self._for_write = True
--> 348 obj.save(force_insert=True, using=self.db)
349 return obj
350

/usr/local/lib/python2.7/dist-packages/django/db/models/base.pyc in
save(self, force_insert, force_update, using, update_fields)
708
709 self.save_base(using=using, force_insert=force_insert,
--> 710 force_update=force_update,
update_fields=update_fields)
711 save.alters_data = True
712

/usr/local/lib/python2.7/dist-packages/django/db/models/base.pyc in
save_base(self, raw, force_insert, force_update, using, update_fields)
736 if not raw:
737 self._save_parents(cls, using, update_fields)
--> 738 updated = self._save_table(raw, cls, force_insert,
force_update, using, update_fields)
739 # Store the database on which the object was saved
740 self._state.db = using

/usr/local/lib/python2.7/dist-packages/django/db/models/base.pyc in
_save_table(self, raw, cls, force_insert, force_update, using,
update_fields)
820
821 update_pk = bool(meta.has_auto_field and not pk_set)
--> 822 result = self._do_insert(cls._base_manager, using,
fields, update_pk, raw)
823 if update_pk:
824 setattr(self, meta.pk.attname, result)

/usr/local/lib/python2.7/dist-packages/django/db/models/base.pyc in
_do_insert(self, manager, using, fields, update_pk, raw)
859 """
860 return manager._insert([self], fields=fields,
return_id=update_pk,
--> 861 using=using, raw=raw)
862
863 def delete(self, using=None):

/usr/local/lib/python2.7/dist-packages/django/db/models/manager.pyc in
manager_method(self, *args, **kwargs)
125 def create_method(name, method):
126 def manager_method(self, *args, **kwargs):
--> 127 return getattr(self.get_queryset(), name)(*args,
**kwargs)
128 manager_method.__name__ = method.__name__
129 manager_method.__doc__ = method.__doc__

/usr/local/lib/python2.7/dist-packages/django/db/models/query.pyc in
_insert(self, objs, fields, return_id, raw, using)
918 query = sql.InsertQuery(self.model)
919 query.insert_values(fields, objs, raw=raw)
--> 920 return
query.get_compiler(using=using).execute_sql(return_id)
921 _insert.alters_data = True
922 _insert.queryset_only = False

/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.pyc
in execute_sql(self, return_id)
969 with self.connection.cursor() as cursor:
970 for sql, params in self.as_sql():
--> 971 cursor.execute(sql, params)
972 if not (return_id and cursor):
973 return

/usr/local/lib/python2.7/dist-packages/django/db/backends/utils.pyc in
execute(self, sql, params)
77 start = time()
78 try:
---> 79 return super(CursorDebugWrapper, self).execute(sql,
params)
80 finally:
81 stop = time()

/usr/local/lib/python2.7/dist-packages/django/db/backends/utils.pyc in
execute(self, sql, params)
62 return self.cursor.execute(sql)
63 else:
---> 64 return self.cursor.execute(sql, params)
65
66 def executemany(self, sql, param_list):

/usr/local/lib/python2.7/dist-packages/django/db/backends/mysql/base.pyc
in execute(self, query, args)
127 # misclassified and Django would prefer the more
logical place.
128 if e.args[0] in self.codes_for_integrityerror:
--> 129 six.reraise(utils.IntegrityError,
utils.IntegrityError(*tuple(e.args)), sys.exc_info()[2])
130 raise
131

/usr/local/lib/python2.7/dist-packages/django/db/backends/mysql/base.pyc
in execute(self, query, args)
122 try:
123 # args is None means no string interpolation
--> 124 return self.cursor.execute(query, args)
125 except Database.OperationalError as e:
126 # Map some error codes to IntegrityError, since
they seem to be

/usr/lib/python2.7/dist-packages/MySQLdb/cursors.pyc in execute(self,
query, args)
172 del tb
173 self.messages.append((exc, value))
--> 174 self.errorhandler(self, exc, value)
175 self._executed = query
176 if not self._defer_warnings: self._warning_check()

/usr/lib/python2.7/dist-packages/MySQLdb/connections.pyc in
defaulterrorhandler(***failed resolving arguments***)
34 del cursor
35 del connection
---> 36 raise errorclass, errorvalue
37
38 re_numeric_part = re.compile(r"^(\d+)")

IntegrityError: (1048, "Column 'poll_id' cannot be null")

Mike Dewhirst

unread,
Jun 26, 2015, 3:48:09 AM6/26/15
to django...@googlegroups.com
On 26/06/2015 3:24 PM, Elim Qiu wrote:
> Installed django recently, followed the django tutorial pdf to some
> where arround page 20. But got problems...
>
> It's on ubuntu 14.04, I have ipython installed and the following command
> some how brings up ipython. And it will raise exception for command
> Question.objects.filter(question_text__startswith='What')
>
> I have to do double quotes instead:
> Question.objects.filter(question_text__startswith="What")
>
> But now I encountered the following error and need your help:

The last line of the traceback gives the answer ...

IntegrityError: (1048, "Column 'poll_id' cannot be null")

It's a long time since I looked at the tutorial but I seem to remember
that questions each belong to a poll. So create a poll first if you
haven't done so already and then make sure question is related to poll.

Try finding polls ...

<anything>.objects.all() returns a queryset even if there is only one
object in it.
https://docs.djangoproject.com/en/1.7/topics/db/queries/#retrieving-all-objects

Querysets are very clever because they don't hit the database until you
need the actual objects. If you slice the queryset or list it, it gets
evaluated and the objects it points to become available.

so ...

from polls.models import Poll
poll_qs = Poll.objects.all()

If there is at least one Poll object you can get it directly if you know
enough about it to specify it in a filter() or use
Poll.objects.get(id=1) (er .. that's not how you would normally do it)

<anything>.objects.get() returns one object (not a queryset) or a
DoesNotExist or MultipleObjectsReturned error so you really must specify
it properly.

In any case, having discovered the poll you are interested in, you need
a variable to represent it. So ...

p = poll_qs[0] # this slices the first object off the queryset

... and p is the first object in the queryset.

Now retrieve the question as you did previously but this time assign it
to a variable like this ...

> In [11]: q = Question.objects.get(pub_date__year=this_year)
> Out [12]: q

Now

q.poll = p
q.save()

... and that should stop the IntegrityError: (1048, "Column 'poll_id'
cannot be null")

With any luck.

hth

Mike

elim

unread,
Jun 30, 2015, 3:21:33 PM6/30/15
to django...@googlegroups.com
Thanks a lot Mike Dewhirst. I think that's issue.

Directly check the database, there is no poll record there.

My current  models.py in poll reads like

import datetime
from django.db import models
from django.utils import timezone

# Create your models here.

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

class Question(models.Model):
    def __unicode__(self):
        return self.question_text
    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

class Choice(models.Model):
    def __unicode__(self):
        return self.choice_text
    poll = models.ForeignKey(Poll)
    question = models.ForeignKey(Question)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

And the corresponding mysql database tables are
mysql> desc polls_poll;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| question | varchar(200) | NO   |     | NULL    |                |
| pub_date | datetime     | NO   |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

mysql> desc polls_question;
+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| id            | int(11)      | NO   | PRI | NULL    | auto_increment |
| question_text | varchar(200) | NO   |     | NULL    |                |
| pub_date      | datetime     | NO   |     | NULL    |                |
+---------------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

mysql> desc polls_choice;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| choice_text | varchar(200) | NO   |     | NULL    |                |
| votes       | int(11)      | NO   |     | NULL    |                |
| poll_id     | int(11)      | NO   | MUL | NULL    |                |
| question_id | int(11)      | NO   | MUL | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

This tutorial doesn't ask to create poll record, and since question is not modeled related to poll, so I can create and save a question record without poll.

These seem a bit strange, but let's just create a poll record to move on.

It turns out that's not the case:

>>> q.choice_set.create(choice_text=’Not much’, votes=0)
Cause the exception because
(1) the statement does not contain poll_id value
(2) the statement excutes the database insertion implicitly
(3) the table polls_choice column was set not null.

My guess is that the tutorial is out of sync with the changes of django....

So what's the best doc for learning django?
Reply all
Reply to author
Forward
0 new messages