python - create() 用相关表中的每一行填充 manytomany,而不是将其留空
问题描述
目前,我在 models.py 中有三个模型:
class User(AbstractUser):
pass
class Watchlist(models.Model):
user = models.OneToOneField(User, on_delete = models.CASCADE)
listings = models.ManyToManyField('Listing', related_name = "watchlists", blank = True)
class Listing(models.Model):
title = models.CharField(max_length = 150)
description = models.TextField()
当用户创建他们的关注列表时会出现问题,该关注列表由 views.py 中的这段代码处理:
# Each listing has it's own page,
# with a URL of the form /listing/<int:pk>
def listing(request, pk):
listing_instance = Listing.objects.get(pk = pk)
if request.method == "GET":
# return the page for the listing with primary key pk
elif request.user.is_authenticated:
watchlist_instance = Watchlist.objects.get_or_create(user = request.user)[0]
watchlist_instance.listings.add(listing_instance)
我希望由创建的行在Watchlist.objects.get_or_create(user = request.user)
它的 中没有关系listings
,而是它与列表表中的每一行都有关系(意味着最后一行什么都不做)。
例如,如果列表表包含三行:
- 清单1
- 清单2
- 清单3
并且一个新用户查看了列表 2 的页面并尝试将其添加到他们的关注列表中,他们的关注列表将包括所有三个列表。
为了确认create()
是导致问题的原因,我尝试了这个:
elif request.user.is_authenticated:
watchlist_instance = listing_instance.watchlists.create(user = request.user)
这看起来(对我来说)基本上等同于create() 官方文档中给出的示例,但与我的其他代码有相同的问题。
我怎样才能确保create()
留下listings
空白(以便我可以将单曲添加listing_instance
到其中),而不是用表格中的每个列表填充它?
编辑:即使在 Django 的管理界面中创建监视列表,问题仍然存在;该字段会自动填充每个listing
. clear()
此外,无法通过remove()
或在管理界面中删除关系。
Django 版本 3.1.1
sqlite3
蟒蛇 3.8.6
解决方案
OP是个白痴,这个问题从来没有存在过。
我假设 Django 的监视列表管理页面只会显示相关的列表,但事实证明它只显示每个列表,无论它们是否相关。
推荐阅读
- scala - Scala Play:使用可选字段实现自定义 QueryStringBindable
- excel - 基于公式结果的条件格式
- excel - Excel条件格式色标公式
- python - 如何监视文件夹并在打开时执行操作?(例如:Python 看门狗)
- tensorflow - 创建自定义图层
- java - CORDA 错误验证两方之间的交易
- java - 在 Android Studio 中集成 HMS 时出错,未定义 SignInCenter
- r - 使用 ggplot 在网格中绘制两个 stat_function()
- api - 对 VALR 的经过身份验证的 api 调用 - Python 3.8
- kentico - 如何从控制台应用程序使用 Kenitco API