我之前已经看过这个问题,但是我在获取对象和过滤方面受到更多限制。
编辑-删除成员和标题之间的关系,并将成员和xmlgraph更改为一对多关系
我在models.py中有这些类:
class Title(models.Model):
title = models.TextField(null=True)
def __str__(self):
return self.title
class XMLGraph(models.Model):
#only one title per graph
title = models.OneToOneField(
to=Title,
blank=True,
null=True,
on_delete=models.CASCADE)
XMLGraph = models.TextField(null=True)
def __str__(self):
return str(self.XMLGraph)
class Member(User):
XMLGraph = models.ForeignKey('XMLGraph',
null=True,
on_delete=models.CASCADE)
def __str__(self):
return self.username
class Profile(models.Model):
user = models.OneToOneField(
to=Member,
blank=True,
null=True,
on_delete=models.CASCADE
)
def __str__(self):
return self.name
一个成员可以存储多个 XMLGraphs ,它们基本上是存储在数据库中的文本文件。我具有一项功能,用户可以将其保存并另存为 XMLGraph 。
如果数据库中没有任何内容,则保存功能应创建 XMLGraph 的新对象,或更新当前的 XMLGraph 。因此,当用户按下保存时,它应该更新存储在 XMLGraph 中的数据。因此,我采用了这种方法:
将功能保存在views.py
def saveData(request, user):
if request.method == "POST":
xmlData = request.POST['xml']
member = Member.objects.get(username=user)
XMLGraph.objects.all().delete()
xml, _ = XMLGraph.objects.get_or_create(XMLGraph = xmlData)
member.XMLGraph.add(xml)
return render_to_response("fastcookapp/index.html", content_type="text/xml;")
return HttpResponse('POST is not used')
但是,现在的问题是,另存为功能应该为 XMLGraph 和 Title 生成一个新对象,该对象可以正常工作,但是一次他们单击保存函数,由于 saveData
中的以下行,它将删除 XMLGraph 的先前数据XMLGraph.objects.all().delete()
在views.py 中另存为:
@loggedin
def saveAs(request, user):
if request.method == "POST":
member = Member.objects.get(username=user)
graphTitle = request.POST['title']
title = Title.objects.create(title=graphTitle)
member.title.add(title)
xmlData = request.POST['xml']
xml = XMLGraph.objects.create(XMLGraph = xmlData, title=title)
member.XMLGraph.add(xml)
return render_to_response("fastcookapp/index.html", content_type="text/xml;")
return HttpResponse('POST is not used')
我知道使用了.remove()而不是删除,但是它似乎无法正常工作,因为我无法删除用户按下保存时添加的先前数据。