DjangoでForeignKey
とManyToMany
の関係を使用しているときに、オブジェクトのリストからオブジェクトを削除できません。ここでManyToMany関係を持つDjangoのQuerySetリストからオブジェクトを削除する
は、私はアイテム、リスト、および受注(仲介モデル)用に設定されているモデルです。
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
しかし、私は働く解決策を見つけることができませんでした。
注:あなたのターゲットは 'PK' あなただけのList.objects.getを使用することができます(PK).delete()からに参照される項目がある場合、私はジャンゴ1.5とPython 2.7
ビューは理にかなっていません1つのpkしか持っていない、どのように削除するか知っていますか?あなたの目標は誰ですか? –
私のターゲットは 'item'です。私は 'item'のtitle_englishフィールドと' sourceObj'のtitle_englishフィールドを比較するためにQuerySetフィルタを使うことを考えていました。 'list'から' item'を削除してください。私はちょうど – hammerabi
btwで始まるリストの 'items'にアクセスする方法がわかりません。ちょうど気づいた、あなたはdjango 1.5を使っていますか?現在のバージョンは1.10です。これは本当に古いものです... –