如何在Django中使用不同的应用程序来复制模型?

2024-10-02 06:36:17 发布

您现在位置:Python中文网/ 问答频道 /正文

要计算在foreignkey中但在不同应用程序中与另一个模型相乘的模型,这里是penjualan应用程序详细说明penjualan\u obat模型

class detail_penjualan_obat(models.Model):

    kd_penjualan_detail = models.ForeignKey(penjualan_obat)
    kd_obat_detail = models.ForeignKey(obat)
    jumlah_jual = models.IntegerField()
    total_harga_perobat = MoneyField(max_digits=10, decimal_places=2, default_currency='IDR')


    def __unicode__(self):
        return self.total_harga_perobat

以及obat应用程序模式

class obat(models.Model):

    jenis_obat = {

        ('obat bebas','Obat Bebas'),
        ('obat bebas terbatas','Obat Bebas Terbatas'),
        ('obat keras dan psikotropika','Obat Keras dan Psikotropika')
    }

    kd_obat = models.CharField(primary_key = True, default = '', max_length = 10, validators=[RegexValidator(r'^\d{1,10}$')])
    nama_obat = models.CharField(max_length = 15)
    tipe_obat = models.CharField(max_length = 35, choices = jenis_obat)
    harga_jual = MoneyField(max_digits=10, decimal_places=2, default_currency='IDR')

    def __unicode__(self):
        return self.kd_obat

以及视图.py地址:

def data_penjualan_obat_detail(request):
    if request.method == 'POST':
        form_data = request.POST
        form = penjualan_detail_form(form_data)

        if form.is_valid():

            input_detail_penjualan = detail_penjualan_obat(

                kd_penjualan_detail = form.cleaned_data.get('kd_penjualan_detail'),
                kd_obat_detail =  form.cleaned_data.get('kd_obat_detail'),
                jumlah_jual = request.POST['jumlah_jual'],
                total_harga_perobat = form.cleaned_data.get('total_harga_perobat')

                )
            input_detail_penjualan.save()
            return redirect('/')
    else:
        form = penjualan_detail_form()

    return render(request, 'penjualan_detail.html',{'form':form})

函数如下: total_harga_perobat=harga_jual*jumlah_jual

这个函数如何在视图中“放置和工作”?你知道吗

对不起,我英语不好,但我希望你能理解我的问题,解决我的问题

编辑:

这里是彭华兰奥巴特的模型:

class penjualan_obat(models.Model):

    kd_penjualan = models.CharField(primary_key = True, default = '', max_length = 10, validators=[RegexValidator(r'^\d{1,10}$')], unique = True)
    kd_costumer_obat = models.ForeignKey(costumer)
    tgl_penjualan = models.DateField(auto_now_add = True)
    total_penjualan = MoneyField(max_digits=10, decimal_places=2, default_currency='IDR')

    def __unicode__(self):
        return self.kd_penjualan

以及表格penjualan\u detail\u form:

class penjualan_detail_form(ModelForm):
    class Meta:

        model = detail_penjualan_obat
        fields = ['kd_penjualan_detail','kd_obat_detail','jumlah_jual']
        labels = {

            'kd_penjualan_detail' : 'Kode Penjualan',
            'kd_obat_detail' : 'Kode Obat',
            'jumlah_penjualan' : 'Jumlah Penjualan',
        }

        error_messages = {

            'kd_penjualan_detail':{
                'required':'Anda harus memilih kode penjualan'
            },

            'kd_obat_detail':{
                'required':'Anda harus memilih kode obat'
            },

            'jumlah_penjualan':{
                'required':'Anda harus mengisi jumlah penjualan'
            },      
        }

Tags: selfformdatamodelsmaxkdclasstotal
1条回答
网友
1楼 · 发布于 2024-10-02 06:36:17

更正

  1. 我建议您使用标准命名更改模型类名。 例如class detail_penjualan_obat(models.Model)class DetailPenjualanObat(models.Model)

  2. 我建议你不要对你的unique字段使用default = ''。 无论何时迁移数据库,这都很困难。

  3. 为什么要实现form.cleaned_data.get('total_harga_perobat'), 如果你真的想自动保存它?你应该在后台处理它。


I checked at your source code, and your penjualan_detail_form already instanced to the model of detail_penjualan_obat. perhaps like this below;

def data_penjualan_obat_detail(request):
    if request.method == 'POST':
        form = penjualan_detail_form(request.POST)
        if form.is_valid():
            initial = form.save(commit=False)
            initial.total_harga_perobat = initial.kd_obat_detail.harga_jual * initial.jumlah_jual
            initial.save()
            form.save()
            return redirect('/')
    else:
        form = penjualan_detail_form()

    return render(request, 'penjualan_detail.html', {'form': form})

希望能有帮助。。你知道吗

更新

您也可以在models.py中处理它,例如:

class DetailPenjualanObat(models.Model):
    kd_penjualan_detail = models.ForeignKey(penjualan_obat)
    kd_obat_detail = models.ForeignKey(obat)
    jumlah_jual = models.IntegerField()
    total_harga_perobat = MoneyField(max_digits=10, decimal_places=2, default_currency='IDR')

    def save(self, *args, **kwargs):
        self.total_harga_perobat = self.kd_obat_detail.harga_jual * self.jumlah_jual
        super(DetailPenjualanObat, self).save(*args, **kwargs)

另请参见关于^{},例如answer

相关问题 更多 >

    热门问题