2015-09-06 41 views
0

我已經在Django以下型號:如何從SqlAlchemy中的Django ORM描述一對一關係?

class News(models.Model): 
    title = models.CharField(max_length=1000) 
    # some fields 
    image = models.ForeignKey("media.Image",blank=True, null=True) 

# and in another django module 
class Image(models.Model): 
    url = models.URLField(max_length=1000) 

在Postgres裏它看起來像:

=> \d newsfeed_news 

    Column |   Type   |       Modifiers       
-------------+--------------------------+------------------------------------------------------------ 
id   | integer     | not null default nextval('newsfeed_news_id_seq'::regclass) 

... 

image_id | integer     | 

這意味着字段「圖像」中的表 - 僅僅是整數字段,包含的ID圖片。

我試圖建立在SQLAlchemy的這些關係:

class Image(Base): 
    __tablename__ = 'media_image' 
    id = Column(Integer, primary_key=True) 
    url = Column('url',String) 

class newsTable(Base): 
    __tablename__ = 'media_news' 
    id = Column(Integer, primary_key=True) 
    # some fields 
    image_id = Column(Integer, ForeignKey('Image.id')) 
    image = relationship("Image", uselist=False) 

但我得到了以下錯誤:

Can't find any foreign key relationships between 'newsfeed_news' and 'media_image'. Could not determine join condition between parent/child tables on relationship newsTable.image - there are no foreign keys linking these tables.

Ensure that referencing columns are associated with a ForeignKey or ForeignKeyConstraint, or specify a 'primaryjoin' expression.

我做了什麼錯?

回答

0

根據文檔ForeignKey接受column參數,其定義爲:

A single target column for the key relationship. A Column object or a column name as a string: tablename.columnkey or schema.tablename.columnkey .

試圖指定列名作爲字符串,但沒有名爲Image表。您可以從Image模型直接引用Column對象:

image_id = Column(Integer, ForeignKey(Image.id)) 

,或者提供一個正確的表名:

image_id = Column(Integer, ForeignKey('media_image.id'))