在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()
我想我可以尝试编写一些可以解决这个问题的代码,但我宁愿找到一种方法来删除一个并在其位置添加另一个实例。
答案 0 :(得分: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()