【问题标题】:How to change value of choice field in Django shell?如何更改 Django shell 中选择字段的值?
【发布时间】:2018-02-03 18:07:49
【问题描述】:

我在大约一个月前开始使用 Django,但遇到了问题。

我创建了一个与用户模型一对一链接的模型

这是我的models.py 文件:

from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver

# Create your models here.
class UserInfo(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    options = (('individual','Individual'),
                ('institute',"An institute"),
    )
    userAs = models.CharField(max_length=100,choices=options)
    def __str__(self):
        return self.user.username
    class Meta:
        ordering = ["user"]

@receiver(post_save,sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        UserInfo.objects.create(user=instance)

...我想从 shell 更改 userAs 的值,但我无法做到。

这是我尝试过的:

In [10]: us = User.objects.get(username="foo")

In [11]: us.userinfo.userAs
Out[11]: 'individual'

In [12]: type(us.userinfo.userAs)
Out[12]: str

In [13]: us.userinfo.userAs = 'institute'

In [14]: us.save()

In [15]: us.userinfo.userAs
Out[15]: 'institute'

In [16]: us = User.objects.get(username="steve04")

In [17]: us.userinfo.userAs
Out[17]: 'individual'

...但我无法更改它。

【问题讨论】:

    标签: python django shell


    【解决方案1】:

    你的问题

    您正在修改 us.userinfo 并保存您的 us 实例。但是,us 没有改变。您修改了 userinfo 内部的 us 对象,但没有修改 us 本身。

    解决方案

    你应该保存us.userinfo而不是us,这是一个演示:

    In [1]: us = User.objects.get(username="foo")
    
    In [2]: us.userinfo.userAs = 'institute'
    
    In [3]: us.userinfo.save()
    
    In [4]: us = User.objects.get(username="steve04")
    
    In [5]: us.userinfo.userAs
    Out[5]: 'institute'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-07
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      • 1970-01-01
      • 2015-12-30
      • 2019-09-29
      相关资源
      最近更新 更多