我有标准的django User model
和我有一个扩展型号Member
。会员模型已连接到订阅模型。保存到数据库只有一个查询
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)
match_code = models.CharField(max_length=50)
parent = models.ForeignKey("self", null=True, blank=True)
name = models.CharField(max_length=100)
address = models.CharField(max_length=255)
postcode = models.CharField(max_length=10)
city = models.CharField(max_length=100)
country = models.ForeignKey(to=Country, null=True)
language = models.ForeignKey(to=Language)
telephone = models.CharField(max_length=50)
mobile = models.CharField(max_length=50)
main_email = models.EmailField(null=True, blank=True)
active = models.BooleanField()
subscription = models.ForeignKey(Subscription)
def __str__(self):
return self.name
当我创建一个新用户,当我想将它保存到数据库中,我做如下:
language = Language.objects.get(key="EN")
country = Country.objects.get(key="BE")
# Add to user model
user = User()
user.username = request.POST['email']
user.first_name = request.POST['firstname']
user.last_name = request.POST['lastname']
user.email = request.POST['email']
user.set_password(request.POST['password'])
user.save()
# Add subscription
subscription = Subscription()
subscription.started = datetime.date.today()
subscription.type = Type.objects.filter(default=True)
last_subscription = Subscription.objects.all().order_by('-id')[0]
# Get the last field from user model
last_user = User.objects.all().order_by('-id')[0]
# Add to member model with the last user
member = Member()
member.number = request.POST['member_id']
member.address = request.POST['address']
member.postcode = request.POST['postcode']
member.city = request.POST['city']
member.country = country
member.telephone = request.POST['telephone']
member.mobile = request.POST['mobile']
member.user = last_user
member.language = language
member.active = False
member.subscription = last_subscription
member.save()
但是我认为我打的数据库来很多次。有没有更好的解决方案来做到这一点?可以用一个查询来完成吗?
您必须为您的对象编写多个查询,但尝试在一行中创建对象,如:member = Member.objects.create(number = request.POST ['member_id'],<其他字段>) –