問題/問題:
我建立一個Django應用程序,有2種型號:User
和Secret
。用戶可以製作祕密,其他用戶可以「喜歡」它們。我已經將我的likes
字段設置爲ManyToManyField
,以便像祕密的用戶可以存儲在那裏並稍後檢索等。但是,當我嘗試查詢用戶和祕密並使用my_secret.likes.add(my_User)
時沒有任何反應。我沒有收到錯誤,當我打印我的祕密的many-to-many
likes
字段後,添加,我看到: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.
問題舉例:
模型遷移罰款,一切似乎是在正確的語法。但是,當我嘗試檢索User
和Secret
,並將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
任何關係。我究竟做錯了什麼?
嘗試'append'或'update'而不是關閉添加 – hansTheFranz
@hansTheFranz我非常感謝你試圖幫助我。我剛剛嘗試使用'append()'代替'add()',並接收到此錯誤:'AttributeError:'ManyRelatedManager'對象沒有屬性'append''。我也嘗試使用'update()'並收到這個錯誤:'TypeError:update()只需要1個參數(2給定)'。使用與我的帖子完全相同的格式,只需用您描述的添加方法替換即可!不幸的是仍然在這裏作戰! – natureminded