首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过id限制Django ManyToMany

通过id限制Django ManyToMany
EN

Stack Overflow用户
提问于 2016-10-05 22:51:23
回答 3查看 280关注 0票数 0

我需要在管理视图中显示要添加到停车场的汽车列表,到目前为止与此代码良好

代码语言:javascript
运行
复制
class Car(models.Model):
    name = models.CharField(max_length=200)

class Parking(models.Model):
    name = models.CharField(max_length=200)          
    options = models.ManyToManyField(Car)  

但是在汽车的列表中显示所有来自所有停车场的汽车,我只需要显示添加到某个特定停车场的汽车,而不是所有的汽车。

怎样才能做到这一点?

在纯sql中,我将与映射表进行连接,并根据停车id进行过滤

如果我在管理视图中编辑一个停车场,我希望看到一个带有"car1“、"car2”、"car3“的可滚动列表,如果我在管理视图中编辑另一个停车,我希望看到一个带有"car4”、"car5“、"car6”的可滚动列表

现在我看到所有的车都停在那里

EN

回答 3

Stack Overflow用户

发布于 2016-10-05 23:50:50

Django Admin是为开发人员准备的数据库编辑器,而不是为用户准备的。

考虑到这一点,汽车列表将始终显示所有汽车。要查看哪些汽车属于某个停车场,您需要进入停车列表并编辑其中一个停车对象。在那里,您将看到options显示为多选列表。

如果您不喜欢多选列表,可以使用ModelAdmin覆盖它。

代码语言:javascript
运行
复制
from django.contrib import admin
from myapps.models import Parking

class ParkingAdmin(admin.ModelAdmin):
     model = Parking
     filter_horizontal = ('options',)

这将创建一个如下所示的控件:

但是,如果您需要相关汽车的更完整的可编辑表单,则可以使用InlineModelAdmin

代码语言:javascript
运行
复制
from django.contrib import admin
from myapp.models import Car, Parking

class CarInline(admin.TabularInline):
    model = Car

class ParkingAdmin(admin.ModelAdmin):
    inlines = [CarInline,]

这将在底部创建一个列表,如下所示:

如果你需要更详细的视图,你应该自己创建它们,而不是使用Admin.Admin.同样,Admin是给开发人员的,而不是用户的。

票数 1
EN

Stack Overflow用户

发布于 2016-10-05 22:55:38

您可以查询特定的停车场,然后遍历各个选项。

代码语言:javascript
运行
复制
lot = Parking.objects.get(id=1)
cars = lot.options.all()

您还可以通过过滤多对多关系来直接查询汽车。

代码语言:javascript
运行
复制
Car.objects.filter(parking__id=1)

在这两种情况下,Django都会在后台为您执行连接。如果您想了解Django是如何构建查询的,您可以使用任何查询集并使用.query获取SQL。

代码语言:javascript
运行
复制
print Car.objects.filter(parking__id=1).query

要了解有关跨关系进行查询和查找的更多信息,请阅读https://docs.djangoproject.com/en/1.10/topics/db/queries/#lookups-that-span-relationships

票数 0
EN

Stack Overflow用户

发布于 2016-10-05 23:47:54

Django提供了ForeignKey参数limit_choices_to。这就是你需要的,因为管理员会尊重你的设置。

编写正确的代码留作en练习。该链接将为您提供指导。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39877290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档