2016-12-14 69 views
0

我正在一个Django 1.10项目的工作与Python 3 这是我的models.py:的Django不更新数据库

# /Multiple choices/ 
SEX_CHOICES = (('M', 'Male'), 
       ('F', 'Female') 
      ) 

ZONE_CHOICES = (('D', 'Départementale'), 
       ('N', 'Nationale') 
      ) 

# /Extension of User model/ 
class Profile(models.Model): 
    user = models.OneToOneField(User, related_name='profile') 
    sex = models.CharField(max_length=1, choices=SEX_CHOICES, default='M') 
    departementNumber = models.PositiveSmallIntegerField(default=88, validators=[MaxValueValidator(101)]) 
    departement = models.CharField(max_length=200) 
    zone = models.CharField(max_length=1, choices=ZONE_CHOICES, default='D') 
    receivedApprove = models.PositiveSmallIntegerField(default=0) 
    receivedDescription = models.PositiveSmallIntegerField(default=0) 
    receivedDesapprove = models.PositiveSmallIntegerField(default=0) 
    givenApprove = models.PositiveSmallIntegerField(default=0) 
    givenDescription = models.PositiveSmallIntegerField(default=0) 
    givenDisapprove = models.PositiveSmallIntegerField(default=0) 

    def __str__(self): 
     return self.user.username 

我所试图做的是采取一些用户信息,并完成他们的个人资料。这是我在我的views.py中做的:

user_id = request.user 

firstname = form.cleaned_data['firstname'] 
lastname = form.cleaned_data['lastname'] 
email = form.cleaned_data['email'] 
sex = form2.cleaned_data['sex'] 
departementNumber = form2.cleaned_data['departementNumber'] 
zone = form2.cleaned_data['zone'] 

在这个阶段,一切工作正常。当我尝试更新我的模型时,问题就开始了。用户对象已正确更新:

upd = User.objects.filter(id=user_id.id).update(first_name=firstname, last_name=lastname, email=email) 

但资料没有更新:

upd2 = Profile.objects.filter(id=user_id.id).update(sex=sex, departementNumber=departementNumber, departement=depName, zone=zone) 

,我还没有一个单一的警告或错误信息。

+0

首先,你为什么要用update来更新单行?其次,为什么你认为一个配置文件与其相关用户具有相同的id值? –

+0

那么因为在查询集'更新'是更新模型的正确方法。而“为什么你认为一个配置文件与其相关的用户具有相同的id值?”由于我使用'OneToOneField',配置文件应该使用用户ID作为外键。不是? –

+0

是的,但你没有通过外键查询,你是通过主键查询的。 –

回答

0

我认为问题出在Profile模型中。您应该将'primary_key = True'添加到'user'字段,以便获得与实际用户相同的id。

例如 user = models.OneToOneField(User,related_name ='profile',primary_key = True)

+0

谢谢,我忘记了'primary_key = True' –