使用循环在Django模型中使用save函数和管理员保存按钮保存多个数据

21 浏览
0 Comments

使用循环在Django模型中使用save函数和管理员保存按钮保存多个数据

我试图在Django admin中的循环中保存数据。当我按下时,它应该保存在数据库中,并带有相同的参数,除了一个字段,在每一行中该字段的值都不同。

class DealersList(models.Model):
    dealers_company = models.CharField(unique=True,max_length=100)
    concern_district = models.CharField(max_length=25, choices=CITY_CHOICES, default=False)
    address = models.CharField(max_length=50)
    vdc = models.CharField(max_length=30)
    contact_person = models.CharField(max_length=50,blank=True)
    phone_number = models.CharField(max_length=14,blank=True)
    email = models.EmailField(max_length=70,blank=True, null= True, unique= True)
class SimDetail(models.Model):
    mobile_no = models.BigIntegerField("Mobile Number",unique=True)
    number_of_sim = models.IntegerField()
    agent = models.ForeignKey('DealersList',on_delete=models.CASCADE,to_field='dealers_company')
    sim_activation_date = models.DateField(auto_now=False, auto_now_add=False)
    submission_date = models.DateField(auto_now=False, auto_now_add=False)
    remarks = models.TextField(null=True,blank=True,validators=[MaxLengthValidator(200)])
    
    def save(self,*args, **kwargs):   
        ite=0
        for x in xrange(0,self.number_of_sim):
            self.mobile_no=self.mobile_no+ite
            ite=1
        super(SimDetail, self).save(*args, **kwargs)

目前它只保存最后一个数据,我认为(我可能错了),它可能会一次又一次地被替换,所以最后只存储最后一个值。

有人可以帮我吗?我正在尝试仅从管理员处使用它,而不使用表单。

0
0 Comments

在Django模型中使用循环保存多个数据是一个常见的需求。然而,有时候在使用save函数和管理员保存按钮时会出现问题。下面是一个遇到这个问题的用户的回答:

问题的原因是,用户想要在每次保存时创建一个新的对象,而不是更新现有的对象。为了解决这个问题,用户在一个Stack Overflow的链接中找到了答案。链接的内容说明,只需将主键设置为None,就可以在每次保存时创建一个新的对象。

解决方法:

# 在保存之前将主键设置为None
def save(self, *args, **kwargs):
    self.pk = None
    super().save(*args, **kwargs)

这个解决方法很简单,只需要在保存之前将主键设置为None即可。通过这样做,每次使用save函数保存对象时,都会创建一个新的对象。

在Django模型中使用循环保存多个数据时,可能会遇到问题。为了解决这个问题,只需在保存之前将主键设置为None即可。这样每次保存时都会创建一个新的对象。

0