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))

但是当我尝试用这段代码删除和替换描述时,它也会删除 url。

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

我想我可以尝试编写一些代码来解决这个问题,但我宁愿找到一种方法来删除一个并在其位置添加另一个实例。

4

1 回答 1

2

只是为了挑剔,您应该使用表单来处理用户输入。

听起来您想更新一个实例,而不是删除和添加一个几乎完全相同的实例。

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()
于 2012-06-29T02:43:12.863 回答