我是Django的新手 在保存之前,我一直试图从模型字段中获取值,例如:
class Student(models.Model):
name = models.CharField(max_length=30, null=False)
id = models.CharField(max_length=30, null=False, primary_key=True)
phone = models.BigIntegerField(max_length=50, null=False)
def print_name():
#here I want to catch and print the student's name before it saves
我读到了pre_save方法,但我仍然无法管理如何获取当前名称。
答案 0 :(得分:2)
只需覆盖模型中的save
方法即可。
class Student(models.Model):
name = models.CharField(max_length=30, null=False)
id = models.CharField(max_length=30, null=False, primary_key=True)
phone = models.BigIntegerField(max_length=50, null=False)
def save(self):
print self.name
super(Student, self).save()
答案 1 :(得分:0)
您可以通过覆盖默认的save
方法来实现这一目标。
class Student(models.Model):
name = models.CharField(max_length=30, null=False)
id = models.CharField(max_length=30, null=False, primary_key=True)
phone = models.BigIntegerField(max_length=50, null=False)
def save(self, *args, **kwargs):
print self.name
super(Student, self).save(*args, **kwargs)
答案 2 :(得分:0)
如果在save()
方法或模型类中的任何其他方法中,您可以访问任何引用当前实例的self
的模型属性并不重要:
class Student(models.Model):
name = models.CharField(max_length=30, null=False)
id = models.CharField(max_length=30, null=False, primary_key=True)
phone = models.BigIntegerField(max_length=50, null=False)
def any_function(self, any_arg1, any_arg2):
...
print self.name
return self.name
答案 3 :(得分:0)
在这里,我使用pre_save信号
为您提供另一种解决方案from django.db.models.signals import pre_save
from django.dispatch import receiver
@receiver(pre_save, sender=YourModel)
def my_callback(sender, instance, *args, **kwargs):
print instance.name
答案 4 :(得分:0)
出于某种原因,没有一个答案对我有用。
我仍然能够通过从数据库中检索对象并将其与保存的版本进行比较来解决问题:
def save(self, *args, **kwargs):
old_object_instance = YourModel.objects.get(pk=self.pk)
if old_object_instance.your_value != self.your_value:
do_something_here()
super().save(*args, **kwargs)