我在使用Django中的ForeignKey
和ManyToMany
關係刪除對象列表中的對象時遇到問題。從具有ManyToMany關係的Django中的查詢集列表中刪除對象
以下是我爲項目,列表和訂單(中介模型)設置的模型。
class Item(models.Model):
title_english = models.CharField(max_length=250)
url = models.CharField(max_length=250)
img_url = models.CharField(max_length=250)
def __unicode__(self):
return self.title_english
class List(models.Model):
slides = models.ManyToManyField(Item, through='Order')
size = models.PositiveIntegerField(default=0)
def incrementSize(self):
self.size = self.size+1
def __unicode__(self):
return "List: " + str(self.slides.all())
class Order(models.Model):
item = models.ForeignKey(Item, on_delete=models.CASCADE)
list = models.ForeignKey(List, on_delete=models.CASCADE)
index = models.PositiveIntegerField()
def __unicode__(self):
return str(index) + ": " + str(self.item)
def appendItemToList(self, item, list):
self.item = item
self.list = list
self.index = list.size
list.incrementSize()
我像這樣將對象添加到列表中(從現有對象動態創建的),通過視圖:
def AddItem(request, pk):
sourceObj = SourceObject.objects.get(pk=pk)
lst = List.objects.all()
if not lst:
lst = List()
lst.save()
else:
lst = lst[0]
item = Item(title_english=sourceObj.name_english, url=sourceObj.slug, img_url=sourceObj.media)
item.save()
order = Order()
order.appendItemToList(item, lst)
order.save()
lst.save()
return redirect("some_url")
現在我的問題是,刪除的項目加入到list
。我無法理解如何訪問目標對象。
def RemoveItem(request, pk):
lst = List.objects.all()
lst.delete() #deletes the entire list
#how do I access the target object from here to delete it
return redirect("some_url")
我通過Django文檔閱讀指的是「下面的關係倒退」的位置:https://docs.djangoproject.com/en/dev/topics/db/queries/#backwards-related-objects
但是我無法找到一個可行的解決方案。
注:我使用Django 1.5和Python 2.7
該視圖沒有意義,如果你只有一個PK,你怎麼知道要刪除什麼?誰是你的目標? –
我的目標是'項目'。我正在考慮使用QuerySet過濾器來比較'item'的title_english字段和'sourceObj'的title_english字段 - 是否相等;從'list'中刪除'item'。我只是不知道如何訪問'list'中的'items'以 – hammerabi
btw開頭,我剛剛注意到,爲什麼你使用django 1.5?目前的版本是1.10,這就像真的老... –