2017-05-28 51 views
0

問題/問題:

我建立一個Django應用程序,有2種型號:UserSecret。用戶可以製作祕密,其他用戶可以「喜歡」它們。我已經將我的likes字段設置爲ManyToManyField,以便像祕密的用戶可以存儲在那裏並稍後檢索等。但是,當我嘗試查詢用戶和祕密並使用my_secret.likes.add(my_User)沒有任何反應。我沒有收到錯誤,當我打印我的祕密的many-to-manylikes字段後,添加,我看到:secrets.User.None爲什麼在Django的`many-to-many` Django模型中,Django的`add()`方法沒有使用?

爲什麼我的add()方法正在運行,但我沒有收到任何錯誤,爲什麼我的用戶沒有正確添加到我的祕密的喜歡?

注意:我在初始創建時保存了User和Secret對象。在這個應用程序之外,我已經能夠很好地使用add()方法,但在那些場景中,我正在創建對象,而不是檢索已存在的對象。

使用從Query中檢索的數據時,有沒有不同的方法來處理add()?這是我現在唯一的其他推理,我完全按照這裏的文檔:Django Many-to-Many Docs

我也很抱歉,如果這是在網站上的其他地方回答。我確實找到了一個other post here,但沒有提供任何解決方案,因爲他們遇到了完全相同的問題。

我的模型:

class User(models.Model): 
    """ 
    Creates instances of a `User`. 

    Parameters: 
    -`models.Model` - Django's `models.Model` method allows us to create new models. 
    """ 

    first_name = models.CharField(max_length=50) # CharField is field type for characters 
    last_name = models.CharField(max_length=50) 
    email = models.CharField(max_length=50) 
    password = models.CharField(max_length=22) 
    created_at = models.DateTimeField(auto_now_add=True) # DateTimeField is field type for date and time 
    updated_at = models.DateTimeField(auto_now=True) # note the `auto_now=True` parameter 
    objects = UserManager() # Attaches `UserManager` methods to our `User.objects` object. 

class Secret(models.Model): 
    """ 
    Creates instances of a `Secret`. 

    Parameters: 
    -`models.Model` - Django's `models.Model` method allows us to create new models. 
    """ 

    description = models.CharField(max_length=100) # CharField is field type for characters 
    user = models.ForeignKey(User, related_name="secrets") # One-to-Many Relationship 
    likes = models.ManyToManyField(User) # Many to Many Relationship 
    created_at = models.DateTimeField(auto_now_add=True) # DateTimeField is field type for date and time 
    updated_at = models.DateTimeField(auto_now=True) # note the `auto_now=True` parameter 
    objects = SecretManager() # Attaches `SecretManager` methods to our `Secret.objects` object. 

問題舉例:

模型遷移罰款,一切似乎是在正確的語法。但是,當我嘗試檢索UserSecret,並將User添加到Secret.likes時,add()方法不提供任何錯誤,運行但未保存對象。

下面是一個例子:

tim = User.objects.get(email="[email protected]") # Gets a user object 
my_secret = Secret.objects.get(id=2) # Gets a secret object 
# This is where nothing seems to happen/take: 
my_secret.likes.add(tim) # add() method per Django many-to-many docs 
print my_secret.likes # returns: `secrets.User.None` -- why? 

爲什麼上面印刷my_secret.likes時,無非是打印?

特別是當: tim.secret_set.all()顯示了含有id=2如在上面的例子....所以User被記錄與所述Secret的關係的祕密,但Secret沒有記錄與所述User任何關係。我究竟做錯了什麼?

+0

嘗試'append'或'update'而不是關閉添加 – hansTheFranz

+0

@hansTheFranz我非常感謝你試圖幫助我。我剛剛嘗試使用'append()'代替'add()',並接收到此錯誤:'AttributeError:'ManyRelatedManager'對象沒有屬性'append''。我也嘗試使用'update()'並收到這個錯誤:'TypeError:update()只需要1個參數(2給定)'。使用與我的帖子完全相同的格式,只需用您描述的添加方法替換即可!不幸的是仍然在這裏作戰! – natureminded

回答

3

您需要呼叫all方法多到許多領域,查看所有相關對象:

print my_secret.likes.all() 
#      ^^^^^ 
+1

....我的朋友,我爲這個惡魔而折磨自己的時間,你是一個天使,有真理的信息!這工作,正是我錯過了!感到愚蠢的是我錯過了這麼基本的東西,並且非常感謝!如果我可以的話,會給你+ 1^10000! – natureminded

相關問題