提问人:JDie 提问时间:11/11/2023 更新时间:11/12/2023 访问量:30
从列表中选择值时如何调出值
How to pull up a value when selecting a value from a list
问:
我们需要聪明人的帮助。 我有以下型号
class PCModel(models.Model):
PC_name = models.CharField('Названние компьютера', max_length=60)
CPU = models.ForeignKey('CPUModel', verbose_name='Процессор', on_delete=models.SET_NULL, blank=True, null=True)
GPU = models.ForeignKey('GPUModel', verbose_name='Видеокарта', on_delete=models.CASCADE, blank=True, null=True)
RAM = models.ForeignKey('RAMModel', verbose_name='Оперативная память', on_delete=models.CASCADE, blank=True,
null=True)
Motherboard = models.ForeignKey(
'MotherboardModel', verbose_name='Материнская плата', on_delete=models.CASCADE, blank=True, null=True
)
HDD = models.ForeignKey('HDDModel', verbose_name='HDD', on_delete=models.CASCADE, blank=True, null=True)
SSD = models.ForeignKey('SSDModel', verbose_name='SSD', on_delete=models.CASCADE, blank=True, null=True)
Power_suppy = models.ForeignKey('Power_suppyModel', verbose_name='Блок питания', on_delete=models.CASCADE,
blank=True, null=True)
Case = models.ForeignKey('CaseModel', verbose_name='Корпус', on_delete=models.CASCADE, blank=True, null=True)
purchase_price = models.IntegerField('Стоимость покупки', default=0)
cost_of_sale = models.IntegerField('Стоимость продажи', default=0)
profit = models.IntegerField('Прибыль', default=0)
slug = models.SlugField(unique=True, blank=True, null=True)
sold = models.BooleanField('Статус', default=False)
def __str__(self):
return self.PC_name
def get_absolute_url(self):
return reverse("pcmodel_detail", kwargs={"slug": self.slug})
def save(self, *args, **kwargs):
self.slug = self.slug
super(PCModel, self).save(*args, **kwargs)
和
class CPUModel(models.Model):
manufacturer = models.CharField(max_length=15, choices=manufacturer_choice)
name = models.CharField(max_length=50)
number_of_cores = models.IntegerField('Количество ядер', choices=number_choice)
number_of_threads = models.IntegerField('Количество потоков', choices=number_choice)
base_frequency = models.IntegerField('Базовая частота', choices=frequency_choice)
turbo_boost = models.IntegerField('Частота Turbo boost', choices=frequency_choice)
socket = models.IntegerField('Сокет', choices=socket_choice)
TDP = models.IntegerField('Тепловыделение (TDP)', choices=TDP_choice)
RAM_type = models.CharField('Поддерживаемый тип памяти', choices=RAM_type_choice, max_length=5)
purchase_price = models.IntegerField('Цена закупки')
count = models.IntegerField('Количество')
in_stock = models.BooleanField('Наличие', default=False)
def __str__(self):
return self.name
def __int__(self):
return self.purchase_price
def get_purchase(self):
return self.purchase_price
有一个表格
class AddPCForm(forms.ModelForm):
CPUModel = ModelChoiceField(label='', queryset=CPUModel.objects.all(), empty_label='')
class Meta:
model = PCModel
fields = [
'PC_name', 'CPU', 'GPU', 'RAM', 'Motherboard', 'HDD', 'SSD', 'Power_suppy', 'Case', 'purchase_price', 'sold'
]
有必要确保在选择处理器时,价格会自动与价格字段绑定。这怎么能做到呢? 我在考虑CPUModel.objects.raw(SQL查询),它会起作用吗?也许其他人知道如何实现它。 在选择处理器(процессор)时,它的价格必须在价格(цена)字段中自动拉高。
答:
1赞
Roberto Rubertelli
11/12/2023
#1
对于 Django,出于安全原因,不建议使用原始 SQL。假定它在网络上。为了有效地管理动态选择,我建议你研究 HTMX js 库。它向服务器发送请求并以 html 格式呈现响应。它具有根据事件更新您的选择的所有工具。当然,它不需要刷新页面。 花一点功夫研究它,这是值得的。 否则,您必须编写一些 JavaScript 代码
评论