2017-02-20 43 views
0

數約與外鍵,但在不同的應用另一種模式,這裏的penjualan應用detail_penjualan_obat模式乘法模型:如何在django中將模型與不同的應用程序相乘?

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 

and view.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

和功能如何成爲 '場所和工作' 的看法?

對不起我的英文不好,但我希望你能明白我的問題,解決我的問題

編輯:penjualan_obat的

這裏模型:

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_detail_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' 
      },  
     } 
+0

給我你的penjualan_obat'和形式的''模型penjualan_detail_form' –

+0

here penjualan_obat model: https://github.com/Rifqi31/SI_Apotek/blob/master/costumer/models.py 和penjualan_detail_form: https://github.com/Rifqi31/SI_Apotek/blob/master/costumer/forms.py –

回答

0

更正

  1. 我建議你用標準命名來改變模型類的名稱。 一個例子class detail_penjualan_obat(models.Model)class DetailPenjualanObat(models.Model)

  2. ,我建議你不要使用default = ''unique領域。 無論何時遷移數據庫,這都會很困難。

  3. 如果您實際上想自動保存它,爲什麼要執行表格form.cleaned_data.get('total_harga_perobat'), ?你應該在你的後端處理它。


我在你的源代碼檢查,您penjualan_detail_form 已實例化到detail_penjualan_obat模型。也許就像下面這樣;

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}) 

希望它可以幫助..

UPDATE

您也可以處理它在你的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) 

參見關於pre save,這樣answer

+0

如果在後端或模型中,該如何計數? –

+0

我已經包含它'initial.total_harga_perobat = initial.kd_obat_detail.harga_jual * initial.jumlah_jual','initial'是'detail_penjualan_obat'的初始對象' –

相關問題