我有django模型如下:
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
因此,成员和订阅需要是OneToOneField
关系,订阅和类型也需要OneToOneField
关系。
但我希望该成员获得default=true
类型的订阅,如果他创建了一个新帐户。
这可能不是应该的问题,但是,我想听听建议。
感谢。
答案 0 :(得分:0)
通常有两种选择:
将一些函数附加到Member
post_save
信号,在函数中创建适当的实例(如果使用created=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>
如果Member.save()
为self.pk
,则覆盖None
方法并创建相应的实例。
def save(self, *args, **kwargs):
if self.pk is None:
<here create your subscription>
super().save(*args, **kwargs)
在这两种情况下,您都需要记住将创建的Subscription
与新的Member
相关联。