Django没有更新数据库

时间:2016-12-14 16:48:44

标签: python django

我正在使用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)

我没有一条警告或错误消息。

2 个答案:

答案 0 :(得分:0)

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

e.g。     user = models.OneToOneField(User,related_name ='profile',primary_key = True)

答案 1 :(得分:0)

我将添加另一种情况,即使用update()方法时数据库不更新。

order = Order.objects.filter(id=d['id']).first()

Order.objects.filter(id=d['id']).update(currency=d['currency'])

# further code using order

在这种情况下,订单行在代码的第一行中被引用,而第二行中的update()不起作用。我不知道第2行不更新数据库中的行的内部原因,但是从逻辑的角度来看,无论如何应该将第1行放在第2行之后(这可以解决)。但是,如果进行了几处代码更改,则可能会发生这种情况,并且它首先看起来是直觉的,即使没有发生DB行更新,update()返回“ 1”的原因也是如此。