J'ai des modèles Django comme suit:
class Type(models.Model):
limit = models.IntegerField()
name = models.CharField(max_length=50)
default = models.BooleanField()
def __str__(self):
return self.name
class Subscription(models.Model):
started = models.DateField()
type = models.OneToOneField(Type)
def __str__(self):
return self.type.name
class Member(models.Model):
user = models.ForeignKey(to=User)
number = models.CharField(max_length=10)
address = models.CharField(max_length=255)
postcode = models.CharField(max_length=10)
city = models.CharField(max_length=100)
active = models.BooleanField()
subscription = models.OneToOneField(Subscription, on_delete=models.CASCADE)
def __str__(self):
return self.name
Ainsi, membre et abonnement doivent être OneToOneField
relation, et abonnement et type aussi OneToOneField
relation.
Mais je veux que ce membre reçoive une souscription de type default=true
, s'il crée un nouveau compte.
Ce n’est peut-être pas la question comme il se doit, mais j’aimerais cependant recevoir des conseils.
Merci.
Réponses:
0 pour la réponse № 1Il y a généralement deux options:
Joindre une fonction à
Member
post_save
signal, en fonction créer des instances appropriées si elle a été appelée aveccreated=True
:from django.db.models.signals import post_save from django.dispatch.dispatcher import receiver @receiver(post_save, sender="myapp.Member") def create_default_subscription(sender, instance, created, raw, using, update_fields): if created: <here create your subscription>
Passer outre
Member.save()
méthode et créer des instances appropriées siself.pk
estNone
.def save(self, *args, **kwargs): if self.pk is None: <here create your subscription> super().save(*args, **kwargs)
Dans les deux cas, vous devez vous rappeler d’associer les Subscription
avec votre nouveau Member
.