NeoVe
NeoVe

Reputation: 3907

Update records depending on fields - Django

I want to override the save method of a model in Django.

Consider this model:

class OtherClass(models.Model):
    name = models.CharField(max_length=255, blank=True, null=True)

class MyClass(models.Model):
    admin = models.ForeignKey(OtherClass, on_delete=models.CASCADE)
    myfield1 = models.CharField(max_length=128)
    myfield2 = models.CharField(max_length=128)
    myfield3 = models.CharField(max_length=128, blank=True, null=True)
    myfield4 = models.CharField(max_length=128, blank=True, null=True)
    myfield5 = models.TextField(blank=True)

What I want, is to update the model only if myfield5 is present in whatever form or view the user is filling. This is the current save method I have:

    def save(*args, **kwargs):
        fieldgroup = f"{self.myfield2}\n{self.myfield3}"
        self.myfield5 = f"{fieldgroup}\n{self.field1} {self.field4} {self.field5}"
        super().save(*args, **kwargs)

Any ideas?

Maybe it would be better to achieve this on a form rather than directly into the model?

Upvotes: 0

Views: 31

Answers (2)

Amandeep Singh
Amandeep Singh

Reputation: 521

You can use required=True in your Model field or Form field

Upvotes: 1

dirkgroten
dirkgroten

Reputation: 20702

You can check self.pk to determine whether the object was already previously saved or not (the first time self.pk is None).

So in combination with self.field5, you can do this:

if self.pk and self.field5:
    self.field5 = ...  # update field5 as you need
    super().save(...)
elif not self.pk:
    super().save(...)
# no saving if self.pk and not self.fields

Upvotes: 1

Related Questions