如何在不删除先前对象的情况下更新Django中的manytomany字段?

时间:2019-01-02 21:51:10

标签: python django

我之前已经看过这个问题,但是我在获取对象和过滤方面受到更多限制。

编辑-删除成员和标题之间的关系,并将成员和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()而不是删除,但是它似乎无法正常工作,因为我无法删除用户按下保存时添加的先前数据。

0 个答案:

没有答案