Django:将模型字段值写入另一个模型下拉列表?
Django: Writing Model Field-Value into another Models Dropdown List?
我有一个带有一堆下拉列表的模型“PC_Configuration”:
class PC_Configuration(models.Model):
PROCESSOR_CHOICES = (
('None', 'Wähle deinen Prozessor'),
('1', 'Prozessor1'),
('2', 'Prozessor2'),
('3', 'Prozessor3'),
)
GRAPHICSCARD_CHOICES = (
('None', 'Wähle deine Grafikkarte'),
('1', 'Grafikkarte1'),
('2', 'Grafikkarte2'),
('3', 'Grafikkarte3'),
)
OS_CHOICES = (
('None', 'Wähle dein Betriebssystem'),
('1', 'Betriebssystem1'),
('2', 'Betriebssystem2'),
('3', 'Betriebssystem3'),
)
RAM_CHOICES = (
('None', 'Wähle deinen Arbeitsspeicher'),
('1', 'RAM1'),
('2', 'RAM2'),
('3', 'RAM3'),
)
HARDDRIVE_CHOICES = (
('None', 'Wähle deine Restspeicher-Größe'),
('1', 'Festplatte1'),
('2', 'Festplatte2'),
('3', 'Festplatte3'),
)
processor = models.CharField(max_length=25, choices=PROCESSOR_CHOICES, default='None')
graphicscard = models.CharField(max_length=25, choices=GRAPHICSCARD_CHOICES, default='None')
ram = models.CharField(max_length=25, choices=RAM_CHOICES, default='None')
os = models.CharField(max_length=25, choices=OS_CHOICES, default='None')
harddrive = models.CharField(max_length=25, choices=HARDDRIVE_CHOICES, default='None')
我刚刚用一些硬编码输入测试了那些下拉字段的选择,但实际上我想获取所有数据以进行选择,例如“处理器”-下拉字段来自模型 名称 字段的 Table 处理器:
class Processors(models.Model):
name = models.CharField(max_length=50)
所以我的问题是:是否有可能获取 名称 - 处理器模型 字段中的所有值,也许将它们写入数组,就像当前的硬编码输入一样,以便能够在 PC_Configuration 模型的下拉字段中显示它们?
简短编辑:
我试过使用类似的东西:
list(PC_Configuration.objects.all().values_list('name', flat=True))
但似乎“PC_Configuration.objects”不存在..
你可以在你的模型中有一个 table 的外键让我们说:
processor = models.ForeignKey(Processors, models.DO_NOTHING)
您可以为 PC_Configuration
创建模型表单
class MyForm(forms.ModelForm):
class Meta:
model = PC_Configuration
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.fields['processors'].quereset = Processors.objects.all()
self.fields['processors'].label_from_instance = lambda obj: "%s" % obj.name
我有一个带有一堆下拉列表的模型“PC_Configuration”:
class PC_Configuration(models.Model):
PROCESSOR_CHOICES = (
('None', 'Wähle deinen Prozessor'),
('1', 'Prozessor1'),
('2', 'Prozessor2'),
('3', 'Prozessor3'),
)
GRAPHICSCARD_CHOICES = (
('None', 'Wähle deine Grafikkarte'),
('1', 'Grafikkarte1'),
('2', 'Grafikkarte2'),
('3', 'Grafikkarte3'),
)
OS_CHOICES = (
('None', 'Wähle dein Betriebssystem'),
('1', 'Betriebssystem1'),
('2', 'Betriebssystem2'),
('3', 'Betriebssystem3'),
)
RAM_CHOICES = (
('None', 'Wähle deinen Arbeitsspeicher'),
('1', 'RAM1'),
('2', 'RAM2'),
('3', 'RAM3'),
)
HARDDRIVE_CHOICES = (
('None', 'Wähle deine Restspeicher-Größe'),
('1', 'Festplatte1'),
('2', 'Festplatte2'),
('3', 'Festplatte3'),
)
processor = models.CharField(max_length=25, choices=PROCESSOR_CHOICES, default='None')
graphicscard = models.CharField(max_length=25, choices=GRAPHICSCARD_CHOICES, default='None')
ram = models.CharField(max_length=25, choices=RAM_CHOICES, default='None')
os = models.CharField(max_length=25, choices=OS_CHOICES, default='None')
harddrive = models.CharField(max_length=25, choices=HARDDRIVE_CHOICES, default='None')
我刚刚用一些硬编码输入测试了那些下拉字段的选择,但实际上我想获取所有数据以进行选择,例如“处理器”-下拉字段来自模型 名称 字段的 Table 处理器:
class Processors(models.Model):
name = models.CharField(max_length=50)
所以我的问题是:是否有可能获取 名称 - 处理器模型 字段中的所有值,也许将它们写入数组,就像当前的硬编码输入一样,以便能够在 PC_Configuration 模型的下拉字段中显示它们?
简短编辑: 我试过使用类似的东西:
list(PC_Configuration.objects.all().values_list('name', flat=True))
但似乎“PC_Configuration.objects”不存在..
你可以在你的模型中有一个 table 的外键让我们说:
processor = models.ForeignKey(Processors, models.DO_NOTHING)
您可以为 PC_Configuration
创建模型表单class MyForm(forms.ModelForm):
class Meta:
model = PC_Configuration
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.fields['processors'].quereset = Processors.objects.all()
self.fields['processors'].label_from_instance = lambda obj: "%s" % obj.name