django 如何在从列表中选择值时拉取值

4ioopgfo  于 11个月前  发布在  Go
关注(0)|答案(1)|浏览(82)

我们需要聪明人的帮助。我有以下模型

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查询),它会工作吗?也许别人知道如何实现它。有必要在选择处理器时,它的价格会自动在价格字段中拉起来。

7gyucuyw

7gyucuyw1#

使用Django,出于安全原因,不建议使用原始SQL。它被假定为在web上。为了有效地管理动态选择,我建议您研究HTMX js库。它将请求发送到服务器并以html呈现响应。它具有所有工具,可以根据事件更新您的选择。自然,它不需要刷新页面。稍微努力研究一下,这是值得的。否则你必须写一些JavaScript代码

相关问题