如何在Django中重构此模型?

发布于 2025-01-21 16:12:32 字数 2755 浏览 2 评论 0原文

我想从Django重构此模型(代码),以便在不编写大量代码或有效的情况下根据需要进行尽可能多的输入。还是我可以在型号中使用循环?

型号

class Sales(models.Model):
    customer = models.ForeignKey(Customer,on_delete=models.CASCADE)
    prescribed_doctor = models.CharField(blank=True,max_length=150)
    date_created = models.DateTimeField(default=timezone.now)
    sales_medicine_1 = models.ForeignKey(Medicines,related_name='sales_medicine',on_delete=models.CASCADE)
    Med_quantity_1 = models.IntegerField(blank=False,default=1)
    Free_quantity_1 = models.IntegerField(blank=True,default=0,null=True)
    margin_1 = models.PositiveIntegerField(blank=True,default=0,null=True)
    discount_1 = models.FloatField(choices=dis,default=0,null=True)
    discount_1_amt = models.FloatField(default=0,null=True)
    rate_1 = models.FloatField(blank=True,default=0,null=True)
    batch_no_1 = models.CharField(null=True,blank=True,max_length=50)
    mfg_1 = models.CharField(max_length=50,blank=True,null=True)
    expiry_1 = models.CharField(max_length=20,null=True,blank=True)
    sales_medicine_2 = models.ForeignKey(Medicines,blank=True,null=True,related_name='sales_medicine_1',on_delete=models.CASCADE)
    Med_quantity_2 = models.IntegerField(blank=True,default=0,null=True)
    Free_quantity_2 = models.IntegerField(blank=True,default=0,null=True)
    margin_2 = models.PositiveIntegerField(blank=True,default=0,null=True)
    discount_2 = models.FloatField(choices=dis,default=0,null=True)
    discount_2_amt = models.FloatField(default=0,null=True)
    rate_2 = models.FloatField(blank=True,default=0,null=True)
    batch_no_2 = models.CharField(null=True,blank=True,max_length=50)
    mfg_2 = models.CharField(max_length=50,blank=True,null=True)
    expiry_2 = models.CharField(max_length=20,null=True,blank=True)
    sales_medicine_3 = models.ForeignKey(Medicines,blank=True,null=True,related_name='sales_medicine_2',on_delete=models.CASCADE)
    Med_quantity_3 = models.IntegerField(blank=True,default=0,null=True)
    Free_quantity_3 = models.IntegerField(blank=True,default=0,null=True)
    margin_3 = models.PositiveIntegerField(blank=True,default=0,null=True)
    discount_3 = models.FloatField(choices=dis,default=0,null=True)
    discount_3_amt = models.FloatField(default=0,null=True)
    rate_3 = models.FloatField(blank=True,default=0,null=True)
    batch_no_3 = models.CharField(null=True,blank=True,max_length=50)
    mfg_3 = models.CharField(max_length=50,blank=True,null=True)
    expiry_3 = models.CharField(max_length=20,null=True,blank=True)
    Payment_status = models.CharField(max_length=15,choices=payment_status)
    Paid_amount = models.FloatField(blank=True,default=0,null=True)
    auto_generated = models.BooleanField(default=False)

I want to refactor this model(code) from Django so that I can take as many inputs as required without writing a lot of code or efficiently. Or Can I use for loop in models?

models.py

class Sales(models.Model):
    customer = models.ForeignKey(Customer,on_delete=models.CASCADE)
    prescribed_doctor = models.CharField(blank=True,max_length=150)
    date_created = models.DateTimeField(default=timezone.now)
    sales_medicine_1 = models.ForeignKey(Medicines,related_name='sales_medicine',on_delete=models.CASCADE)
    Med_quantity_1 = models.IntegerField(blank=False,default=1)
    Free_quantity_1 = models.IntegerField(blank=True,default=0,null=True)
    margin_1 = models.PositiveIntegerField(blank=True,default=0,null=True)
    discount_1 = models.FloatField(choices=dis,default=0,null=True)
    discount_1_amt = models.FloatField(default=0,null=True)
    rate_1 = models.FloatField(blank=True,default=0,null=True)
    batch_no_1 = models.CharField(null=True,blank=True,max_length=50)
    mfg_1 = models.CharField(max_length=50,blank=True,null=True)
    expiry_1 = models.CharField(max_length=20,null=True,blank=True)
    sales_medicine_2 = models.ForeignKey(Medicines,blank=True,null=True,related_name='sales_medicine_1',on_delete=models.CASCADE)
    Med_quantity_2 = models.IntegerField(blank=True,default=0,null=True)
    Free_quantity_2 = models.IntegerField(blank=True,default=0,null=True)
    margin_2 = models.PositiveIntegerField(blank=True,default=0,null=True)
    discount_2 = models.FloatField(choices=dis,default=0,null=True)
    discount_2_amt = models.FloatField(default=0,null=True)
    rate_2 = models.FloatField(blank=True,default=0,null=True)
    batch_no_2 = models.CharField(null=True,blank=True,max_length=50)
    mfg_2 = models.CharField(max_length=50,blank=True,null=True)
    expiry_2 = models.CharField(max_length=20,null=True,blank=True)
    sales_medicine_3 = models.ForeignKey(Medicines,blank=True,null=True,related_name='sales_medicine_2',on_delete=models.CASCADE)
    Med_quantity_3 = models.IntegerField(blank=True,default=0,null=True)
    Free_quantity_3 = models.IntegerField(blank=True,default=0,null=True)
    margin_3 = models.PositiveIntegerField(blank=True,default=0,null=True)
    discount_3 = models.FloatField(choices=dis,default=0,null=True)
    discount_3_amt = models.FloatField(default=0,null=True)
    rate_3 = models.FloatField(blank=True,default=0,null=True)
    batch_no_3 = models.CharField(null=True,blank=True,max_length=50)
    mfg_3 = models.CharField(max_length=50,blank=True,null=True)
    expiry_3 = models.CharField(max_length=20,null=True,blank=True)
    Payment_status = models.CharField(max_length=15,choices=payment_status)
    Paid_amount = models.FloatField(blank=True,default=0,null=True)
    auto_generated = models.BooleanField(default=False)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

空城旧梦 2025-01-28 16:12:32

我得到了解决方案 - 只需使用ManyTomanyfield()即可。

class Sales(models.Model):
    customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
    prescribed_doctor = models.CharField(blank=True, max_length=150)
    date_created = models.DateTimeField(default=timezone.now)
    sales_medicine = models.ManytoManyField(Medicines)

这是django中许多关系的文档: https:/ /docs.djangoproject.com/en/4.0/topics/db/examples/many_to_many/

I got the solution - just use ManytoManyField().

class Sales(models.Model):
    customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
    prescribed_doctor = models.CharField(blank=True, max_length=150)
    date_created = models.DateTimeField(default=timezone.now)
    sales_medicine = models.ManytoManyField(Medicines)

Here is the documentation to many to many relationships in Django: https://docs.djangoproject.com/en/4.0/topics/db/examples/many_to_many/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文