Форум сайта python.su
Читаю книгу “Learning Website Development with Django”. В качестве примера приводится следующая модель:
from django.db import models
from django.contrib.auth.models import User
class Link(models.Model):
url = models.URLField(unique=True)
class Bookmark(models.Model):
title = models.CharField(max_length=200)
link = models.ForeignKey(Link)
user = models.ForeignKey(User)
CREATE TABLE "bookmarks_bookmark" (
"id" integer NOT NULL PRIMARY KEY,
"title" varchar(200) NOT NULL,
"link_id" integer NOT NULL,
"user_id" integer NOT NULL REFERENCES "auth_user" ("id")
);
Отредактировано (Май 7, 2008 11:54:06)
Офлайн
извините, а это настолько важно?
а во-вторых, к примеру в MySQL REFERENCES проставляются после создания таблиц запросом ALTER TABLE…
Офлайн
playpauseandstopНасколько важна ссылочная целостность?
а это настолько важно?
playpauseandstopЭто можно делать практически в любой БД, поддерживающей ANSI SQL, не только в MySQL. Если бы внешние ключи вводились альтерами в скрипте выводимом по запросу:
а во-вторых, к примеру в MySQL REFERENCES проставляются после создания таблиц запросом ALTER TABLE…
Отредактировано (Май 7, 2008 14:34:56)
Офлайн
petrоvichсобственно так и есть
Если бы внешние ключи вводились альтерами в скрипте выводимом по запросу:
Офлайн
Хорошо, пусть я подслеповат, староват и не все вижу в выдаваемом скрипте. :)
Зайдем с другой стороны. В интерактивной панели:
>>> from bookmarks.models import *
>>> bookmark = Bookmark.objects.get(id=1)
>>> bookmark.user
<User: test>
>>> bookmark.link
DoesNotExist: Link matching query does not exist.
Т.е. ссылка на пользователя у объекта bookmark (класса models.Bookmark) есть, на link - нет.
Поле типа ManyToManyField обрабатывается корректно, с внешнего модуля тоже User подбирается, а определяемые в модуле модели (наследники от models.Model) нет.
Попробовал так:
link = models.ForeignKey('Link'),
или к примеру на себя (как в документации):
link = models.ForeignKey('selt')
Результат тот же - внешнего ключа нет. Может проблема в поддежке sqllite (кроме как потестировать она ни на что не нужна, вот и не стали заморачиваться)?
Отредактировано (Май 7, 2008 15:14:39)
Офлайн
petrоvichА вы её туда сохранили? Судя по
Т.е. ссылка на пользователя у объекта класса models.Bookmark есть, на link нет.
petrоvichнет. Так чего удивляться?
DoesNotExist: Link matching query does not exist.
Офлайн
DaevaornКак сохранить?petrоvichА вы её туда сохранили?
Т.е. ссылка на пользователя у объекта класса models.Bookmark есть, на link нет.
class Bookmark(models.Model):
title = models.CharField(max_length=200)
link = models.ForeignKey(Link)
user = models.ForeignKey(User)
Отредактировано (Май 7, 2008 15:28:33)
Офлайн
Офлайн
DaevaornСпасибо за ссылки.
Посмотрите документацию:
http://www.djangoproject.com/documentation/db-api/#related-objects
http://www.djangoproject.com/documentation/models/many_to_one/
Отредактировано (Май 7, 2008 15:43:40)
Офлайн
Вы бы показали, как у вы объект bookmark создаете.
В документации явно указано
petrоvichт.е. поле reporter проинициализировано. У вас же в коде скорей всего ссылка на link пустая.
a = Article(id=None, headline=“This is a test”, pub_date=datetime(2005, 7, 27), reporter=r)
Офлайн