2016-12-14 8 views
0
私のpython 3 でDjangoの1.10プロジェクトに取り組んでいます

は、これが私のmodels.pyです:ジャンゴ更新しないデータベース

# /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) 

そして、私は1つの警告やエラーメッセージが表示されていません。

+0

まず、1行更新に 'update'を使用していますか?第二に、プロファイルが関連するユーザーと同じid値を持つと仮定しているのはなぜですか? –

+0

クエリセット 'update'はモデルを更新する正しい方法です。そして、「なぜ、プロファイルは、その関連ユーザーと同じid値を持つと思いますか?」 'OneToOneField'を使っているので、ProfileはUser IDを外部キーとして使うべきです。いいえ? –

+0

はい、あなたは外部キーで照会していません。主キーで照会しています。 –

答えて

0

問題はプロファイルモデルにあると思います。実際のユーザーと同じIDを取得するには、 'user'フィールドに 'primary_key = True'を追加する必要があります。

user = models.OneToOneField(user、related_name = 'profile'、primary_key = True)

+0

ありがとう、 'primary_key = True'を入れるのを忘れた –

関連する問題