表題の件の通りなのですが、prefetch_relatedを使用いしてJOINしたのちに指定したレコードを削除したいと思っております。
selectは思った動きをしているのですが、deleteがうまく削除されません。
どなたかご教授願えますでしょうか。
selectは下記の通りのコードです。
if_favorite = Favorite.objects.prefetch_related('propertys').all().filter(user_id = login_user_id, propertys = property['id']).values()
上記で発行されるクエリは下記のとおりです。
SELECT `mutual_favorite`.`id`, `mutual_favorite`.`user_id` FROM `mutual_favorite` INNER JOIN `mutual_favorite_propertys` ON (`mutual_favorite`.`id` = `mutual_favorite_propertys`.`favorite_id`) WHERE (`mutual_favorite_propertys`.`property_id` = 12 AND `mutual_favorite`.`user_id` = 1)
上記のコードで発行されるSQLを「select *」 に、「where句も削除」しすべてを表示した結果が下記のとおりです。
+----+---------+----+-------------+-------------+ | id | user_id | id | favorite_id | property_id | +----+---------+----+-------------+-------------+ | 18 | 1 | 36 | 18 | 8 | | 18 | 1 | 37 | 18 | 12 | +----+---------+----+-------------+-------------+
where句の「user_id」で「user_id」を指定しています。
where句の「propertys」で「property_id」を指定しています。
上のクエリを実行するとしっかり下段の結果を取得できるところまでは確認が取れております。
そこで上記のクエリをデリートに変更しようと下記の通りに変更してみます。
Favorite.objects.prefetch_related('propertys').filter(user_id = 1, propertys = 8).delete()
すると実行されるのDELETEのクエリは全てで下記の2件でした
DELETE FROM `mutual_favorite_propertys` WHERE `mutual_favorite_propertys`.`favorite_id` IN (18)
ELETE FROM `mutual_favorite` WHERE `mutual_favorite`.`id` IN (18)
modelは下記のとおりです。
class Property(models.Model): title = models.CharField(max_length=50, blank=False) comment = models.CharField(max_length=300, blank=False) image = models.ImageField(upload_to='photos') vacant_mon = models.BooleanField(default=False) vacant_tue = models.BooleanField(default=False) vacant_wed = models.BooleanField(default=False) vacant_thu = models.BooleanField(default=False) vacant_fri = models.BooleanField(default=False) vacant_sat = models.BooleanField(default=False) vacant_sun = models.BooleanField(default=False) place = models.CharField(max_length=50, blank=False) price = models.PositiveSmallIntegerField(blank=False) create_date = models.DateTimeField(auto_now=True) user = models.ForeignKey(User, on_delete=models.CASCADE) category = models.ForeignKey(Category, on_delete=models.PROTECT) def __str__(self): return self.title class Favorite(models.Model): user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name = "favorite_user") propertys = models.ManyToManyField(Property, blank=True, related_name = "favorite_propertys")
実行される結果が違く困っております。all()をつけてみたり手前にdelete()をつけてみたりしましたがやはりできませんでした。かれこれ何時間もはまっております。この部分が解ければ前回の質問も解決方法を記載できそうなのですが…
どなたかご教授願えませんでしょうか。よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。