【问题标题】:Django model field having multiple dictionary options [closed]具有多个字典选项的 Django 模型字段 [关闭]
【发布时间】:2020-09-04 22:30:30
【问题描述】:

我遇到了一个问题,这是我遇到的规模较小的复制品..

class Garage(models.Model):
    vehicles = models.CharField(max_length=255)

我想在车库中存放多辆汽车。我希望每辆车都是品牌和型号。

所以我想我可以做这样的事情..

class Make(models.Model):
    make = models.CharField()

class Model(models.Model):
    model = models.CharField()

然后我可以在 Garage 类中指定任意数量的 Make:Model 对象并将它们分配给车辆字段。

那么基本上,车辆会喜欢:

{'Ford':'Mustang', 'Chevrolet':'Camaro', 'Dodge':'Charger'}

编辑

在我的管理面板中,我希望能够创建多个车库。当我去车库时,我希望能够看到每个 Make 的新字段。然后对于每个品牌,我希望它成为所有模型的多选字段。

Ford: [Mustang, Camaro, Charger]
Chevy: [Mustang, Camaro, Charger]
Dodge: [Mustang, Camaro, Charger]

因此,当我参考那个车库时,我可以按品牌和型号查看我在其中拥有哪些车辆。

当我进入管理面板时,我想要以下选项:

品牌(我可以在其中创建所有品牌的列表) 模型(我列出所有模型的地方) 车库(它显示所有品牌,每个品牌旁边有一个多选显示所有模型)。

然后,当我保存车库时,这些车辆现在会更新。

【问题讨论】:

  • 听起来您需要一个带有Garage 外键的Vehicle 模型。

标签: django django-models


【解决方案1】:

我建议您创建一个车辆模型,并将其添加到您的车库模型中。因此,我建议您执行以下操作:

class Garage(models.Model):
    name = models.CharField(max_length=60)

class CarMake(models.Model):
    name = models.CharField(max_length=60)

class CarModel(models.Model):
    name = models.CharField(max_length=60)
    make = models.ForeignKey(CarMake)

    def __str__(self):
        return self.name

class Vehicle(models.Model):
    model = models.ForeignKey(CarModel)
    garage = models.ForeignKey(
        Garage, related_name='vehicles',
        blank=True, null=True
    )

您可以在admin.py 文件中注册您的模型:

class VehicleInline(admin.TabularInline):
    model = Vehicle

class GarageAdmin(admin.ModelAdmin):
    model = Garage
    inlines = (VehicleInline,)

admin.site.register(CarMake)
admin.site.register(CarModel)
admin.site.register(Vehicle)
admin.site.register(Garage, GarageAdmin)

【讨论】:

  • 我应该能够创建一个大的品牌列表和一个大的模型列表。然后,当我在管理面板中转到 Vehicle 时,我应该会为我创建的每个 Make 看到一个新选项。然后对于每个品牌,我应该得到一个多选字段来选择我想要的任何模型。
  • @Halloween 你可以通过在你的车辆中使用内联模型来做到这一点。
  • 我对内联模型不熟悉。你有一个简单的例子吗?
  • 您是否允许车辆拥有多个型号?为什么要多选?
  • 我希望车库有多辆车。每个品牌都有多个型号。
猜你喜欢
  • 1970-01-01
  • 2011-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多