如何在没有多对多关系的情况下查询一个 Django 模型并访问另一个 Django 模型?

ska*_*020 1 python django django-models django-queryset django-views

我有一个名为 WatchList 的模型,其中有一个名为 Listing 的对象,该对象通过外键对应于 Listings 模型。我希望能够通过 WatchList 模型进行查询,以获取用户特定监视列表上的所有列表,并在网页上显示所有列表的所有对象。我不想使用 ManyToMany 字段来执行此操作,因为我刚刚获得了处理 WatchList 模型的 Web 应用程序的不同部分。还有其他方法可以做到这一点吗?

视图.py

def watchlist(request):
    watchlists = WatchList.objects.filter(user=request.user)
    for listing in watchlists.listing:
        listings_needed = watchlists.listing()
    watchlist_listing = watchlists.get(listing)
    listings = Listings.objects.all().filter(watchlist_listing)
    return render(request, "auctions/watchlist.html",{
        "listings": listings
    })
Run Code Online (Sandbox Code Playgroud)

模型.py

class Listings(models.Model):
    CATEGORY = [
    ("Miscellaneous", "Miscellaneous"),
    ("Movies and Television", "Movies and Television"),
    ("Sports", "Sports"),
    ("Arts and Crafts", "Arts and Crafts"),
    ("Clothing", "Clothing"),
    ("Books", "Books"),
]
    title = models.CharField(max_length=64)
    description = models.CharField(max_length=500)
    bid = models.DecimalField(max_digits=1000000000000, decimal_places=2)
    image = models.URLField(null=True, blank=True)
    category = models.CharField(max_length=64, choices=CATEGORY, default=None)
    user = models.ForeignKey(User, on_delete=models.CASCADE, default="")

class WatchList(models.Model):
    listing = models.ForeignKey(Listings, on_delete=models.CASCADE, default="")
    user = models.ForeignKey(User, on_delete=models.CASCADE, default="")
Run Code Online (Sandbox Code Playgroud)

当前代码也会出现此错误:

arg, value = filter_expr
TypeError: cannot unpack non-iterable function object
Run Code Online (Sandbox Code Playgroud)

此错误是由 引起的watchlist_listing = watchlists.get(listing)

我也尝试过使用 for 循环,但这不起作用。

Iai*_*ton 5

您可以通过在列表查询集中向后跟踪关系来获取 WatchList 模型中存在条目的用户的所有列表 -Listings.objects.filter(watchlist__user=user)

def watchlist(request):
    listings = Listings.objects.filter(watchlist__user=request.user)
    return render(request, "auctions/watchlist.html",{
        "listings": listings
    })
Run Code Online (Sandbox Code Playgroud)