Python 用户创建后如何更新用户列表字段;信号

Python 用户创建后如何更新用户列表字段;信号,python,django,signals,receiver,Python,Django,Signals,Receiver,我有一个模型问题,它包含所有用户列表字段。创建新用户后,“用户”字段未更新,我需要重新运行服务器以查看更改,我不想这样做 class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') users = User.objects.values_list('id','username'

我有一个模型问题,它包含所有用户列表字段。创建新用户后,“用户”字段未更新,我需要重新运行服务器以查看更改,我不想这样做

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
    users = User.objects.values_list('id','username')
    authorized = MultiSelectField(choices=users,null=True)
    def __str__(self):
        return "{question_text}".format(question_text=self.question_text)

@staticmethod
def update_users(sender, instance, **kwargs):
        #q = Question.objects.all()
        userz = User.objects.values_list('id','username')
        Question.objects.all().update(users=userz)

post_save.connect(Question.update_users, sender=User)
我正在回答:问题没有名为“用户”的字段

我遵循这些提示:但仍然没有工作,我被卡住了。
谢谢你的帮助

如评论中所述,您的
问题
模型中没有名为
用户
的字段。已关闭的字段(
users
)未正确定义。看起来您需要一个
ForeignKey
字段,或者可能需要一个
ManyToMany
字段,具体取决于您希望如何构造该关系。您应该查看django ORM中的属性及其处理方式。另外,您的静态方法
update\u users
似乎没有什么作用。看起来您想将所有用户添加到一个特定的问题中,但您通过调用
values\u list
方法传递了一个值列表:

    userz = User.objects.values_list('id','username')
    Question.objects.all().update(users=userz)
但是,模型的更新方法可以只获取对象本身,而不需要进一步制作
值列表
。我不确定您为什么要这样做,但举一个例子,说明update方法在处理相关对象时需要什么样的参数:

    Question.objects.all().update(users=Users.objects.all())
我认为使用值列表是一个错误。我强烈建议您检查一下,了解一下ORM的用法

作为旁白。。。您不需要这样做:

def __str__(self):
    return "{question_text}".format(question_text=self.question_text)
正如您在对
question\u text
字段的定义中所看到的,它是一个字符串字段(
CharField
),因此您可以执行以下操作:

def __str__(self):
    return self.question_text
编辑1:

Django使用类变量定义字段,但用于使其工作的元编程魔术要求您使用预定义的字段类,以便它可以从数据库中动态填充字段。您使用静态列表定义了该字段:

users = User.objects.values_list('id','username') 
此定义不允许它从数据库动态获取数据,但更重要的是,在创建由模型定义表示的表时,它没有正确定义该列。每个字段表示数据库中的一列,如果不使用django.models模块中提供的适当字段类来定义它,则不会创建该字段


这些都包含在入门文档中。

阅读错误,您的模型没有任何名为
user
的字段。此外,我不明白您为什么在有问题的模型中编写
users=user.objects.values\u列表('id','username')
。@astikan这是我的错误,单击错误,我需要将该字段用于我的Multiselect小部件。我的问题是,我的“选项”没有在另一个用户注册表之后更新,我使用“值列表”,因为将“usesr=user.objects.all()”传递给选项返回:“TypeError:“user”object not iterable”@adampicker没有多大意义,
djangobject.objects.all()
返回iterable对象,看起来您根据提供的错误消息传入了一个
用户
对象。但我建议您查看django文档中的starter项目,或者至少查看relationships部分,因为在过滤/更新相关字段时,
values\u list
不应该起作用(除非它是一个id号列表,但我甚至不确定它在django的较新版本中是否起作用)@adampicker根据您上面的代码和您在这里的评论,您将从阅读django文档中获益匪浅。它清楚地说明了这些字段是如何在那里工作的,而不是根据错误消息尝试不同的操作。好吧,但我的问题是,当字段在那里时,我得到的是FieldDoesNotExist(用户在有问题的模型中归档)。MultiSelectField ass选项接受元组列表这就是为什么有值\u列表,