2012-06-29 165 views
0

在models.py我有...如何刪除多對多而不刪除關係中的所有對象?

class Siteinfo(models.Model): 
    url = models.CharField(max_length=100) 
    description = models.TextField()  

class Makesite(models.Model): 
    sitename = models.CharField(max_length=100, unique = True) 
    siteinfo = models.ManyToManyField(Siteinfo) 
    ref_id = models.ManyToManyField(RefID) 
    def __unicode__(self): 
     return u'%s' %(self.sitename) 

我試圖刪除說明的實例,並與另一個實例替換它,仍然有它與同URL相關聯,並且仍然在許多人許多對象在說。小組。

所以group1是網站名稱。創建的關係我有

url = request.POST['url'] 
description = request.POST['description'] 

datsite = Makesite.objects.get(sitename=site) 
datsite.siteinfo.add(Siteinfo.objects.create(url=url,description=description)) 

但是當我嘗試刪除,並與該位的代碼也刪除網址替換描述。

name = Makesite.objects.get(sitename=site).siteinfo.values_list('description',flat=True)[0] 
Makesite.objects.get(sitename=site).siteinfo.get(description=name).delete() 

我想我可以嘗試寫一些代碼,可以解決這個問題,但我寧願找到一種方法,只需要刪除一個,並在其位置添加另一個實例。

回答

2

爲了挑剔,您應該使用forms來處理用戶輸入。

這聽起來像你想更新一個實例,而不是刪除和添加一個幾乎完全相同。

site_info = Makesite.objects.get(sitename=site).siteinfo.get(description=name) 
site_info.description = "new description" 
site_info.save() 

或者更簡單地說:

site_info = Siteinfo.objects.get(makesite__sitename=site, description=name) # only 1 query 
site_info.description = "new description" 
site_info.save() 
+0

只是可以肯定。在你的例子中name變量是什麼? – city

+0

@city我從你的例子中取了name變量 - 它應該是一個Siteinfo實例的描述。 –

相關問題