2013-01-08 78 views
0

我有兩個簡單的模式是這樣的:外鍵不顯示與Django中的多對多關係?

class User(models.Model): 
    username = models.CharField(max_length=100) #Id is automatically generated by Django 
    password = models.CharField(max_length=100) 

    def __unicode__(self): 
     return self.username 

class File(models.Model): 
    users = models.ManyToManyField(User) 
    file_name = models.CharField(max_length=100) 
    type = models.CharField(max_length=10) 

隨着數據庫的規則,橋樑實體(表)創建。我想知道的是插入數據時我想插入數據庫與session_id(外鍵)在我的情況,以便我可以稍後檢索我的使用。我怎樣才能做到這一點?

+0

你們是不是要問如何將字段添加到中介(加盟)表? – DanielB

+0

你想用什麼'session_id'?它是否將'User'和'File'鏈接起來?如果是這樣,這不是必需的,因爲您可以在django ORM中關注向後/向前的關係。 –

回答

1

如果您想將數據添加到多對多的關係,你就必須使用through選項定義加入表格。 Read here瞭解更多信息。

但是,請注意,您不應保存會話ID - 您想實現什麼目標?原因是用戶不會始終具有相同的sessionID,並且與會話相關的數據(即request.session [*])可能會被刪除。

在任何情況下,一個例子是這個樣子

class User(models.Model): 
    username = models.CharField(max_length=100) #Id is automatically generated by Django 
    password = models.CharField(max_length=100) 

    def __unicode__(self): 
     return self.username 

class File(models.Model): 
    users = models.ManyToManyField(User, through='UserFile') 
    file_name = models.CharField(max_length=100) 
    type = models.CharField(max_length=10) 


class UserFile(models.Model): 
    user = models.ForeignKey(User) 
    file = models.ForeignKey(File) 
    # Should probably use CharField if you know the length 
    session_id = models.TextField() 
+0

我想將session_id插入到數據庫中,以便根據session_id從數據庫中檢索數據。 – user1881957

+0

我已經添加了一個示例,但除非您有充分的理由,否則您可能希望重新考慮使用sessionid – DanielB

+0

非常感謝。我不想保存到session_id。我只想在用戶登錄後獲取session_id。我該怎麼做? – user1881957