2016-12-14 70 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' –