【问题标题】:How Can Get Data From Three Tables (JOIN) in Django?如何从 Django 中的三个表(JOIN)中获取数据?
【发布时间】:2022-08-11 19:49:36
【问题描述】:

我们有以下三个模型。

class Category(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    title = models.CharField(max_length=200)

class CategoryManager(models.Model):
    category = models.ForeignKey(Category, on_delete=models.PROTECT, verbose_name=_(\'Course Category\'), related_name=\"category_categorymanager\")
    manager = models.ForeignKey(_user, verbose_name=_(\'Category Manager\'), on_delete=models.CASCADE, related_name=\"user_categorymanager\")

class Course(models.Model):   
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    title = models.CharField(max_length=200, verbose_name=_(\'Course Name\'))
    ...
    price = models.DecimalField(max_digits=7, decimal_places=2, verbose_name=_(\'Course Price\'), blank=True, null=True)
    slug = models.SlugField(unique=True, blank=True)
    category = models.ForeignKey(Category, related_name=\'courses_category\', on_delete=models.PROTECT)

我们想通过 CategoryManager 过滤课程。

@admin.register(Course)
class CourseAdmin(admin.ModelAdmin):
    def get_queryset(self, request):
        category_manager_list=CategoryManager.objects.filter(manager=request.user)
        ... 
        return ....

使用上面获得的 category_manager_list,我们想要列出属于这些类别的所有课程。

  • 3-展示你尝试过的东西。
  • 当您收到用户的请求时,您应该在views.py 中执行此操作。但是你没有显示你的views.py
  • 我编辑了问题,我们使用 admin.py

标签: python django


【解决方案1】:

您可以使用以下方式过滤:

@admin.register(Course)
class CourseAdmin(admin.ModelAdmin):
    def get_queryset(self, request):
        return Course.objects.filter(
            category__category_categorymanager__manager=request.user
        ).distinct()

笔记:您的CategoryManager 模型充当Category_user 之间多对多关系的连接表。你可以跨越一个 ManyToManyField [Django-doc]Category 模型上:

class Category(models.Model):
    # …
    managers = models.ManyToManyField(
        _user,
        through='CategoryManager'
    )

笔记: 通常使用settings.AUTH_USER_MODEL [Django-doc] 引用用户模型比直接使用User model [Django-doc] 更好。有关更多信息,您可以查看referencing the User model section of the documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 2018-06-04
    • 1970-01-01
    相关资源
    最近更新 更多