我正在一个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)
,我还没有一个单一的警告或错误信息。
首先,你为什么要用update来更新单行?其次,为什么你认为一个配置文件与其相关用户具有相同的id值? –
那么因为在查询集'更新'是更新模型的正确方法。而“为什么你认为一个配置文件与其相关的用户具有相同的id值?”由于我使用'OneToOneField',配置文件应该使用用户ID作为外键。不是? –
是的,但你没有通过外键查询,你是通过主键查询的。 –