我有一个模型问题,它包含所有用户列表字段。创建新用户后,用户字段不会更新,我需要重新运行服务器以查看更改,我不想这样做。你知道吗
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)
我得到:问题没有名为“用户”的字段
我遵循这些提示:How can I have a Django signal call a model method?仍然没有工作,我卡住了。 谢谢你的帮助!你知道吗
如注释中所述,在
Question
模型中没有名为user
的字段。关闭的字段(users
)定义不正确。看起来好像您需要一个ForeignKey
字段,或者可能需要一个ManyToMany
字段,这取决于您想要如何构造这种关系。您应该检查一下docs on relationships以及它们在django ORM中是如何处理的。而且,您的静态方法update_users
似乎没有什么作用。看起来您想将所有用户添加到一个特定的问题,但是您通过调用values_list
方法传递了一个值列表:但是模型的update方法可以直接获取对象本身,而不需要进一步生成
values_list
。我不知道您为什么要这样做,但只是举一个例子,说明update方法在处理相关对象时需要什么样的参数:我相信使用价值观列表是个错误。我强烈建议您查看the Django docs,了解ORM的用法。你知道吗
作为旁白。。。你不需要这样做:
正如您在
question_text
字段的定义中所看到的,它是一个字符串字段(CharField
),因此您可以执行以下操作:编辑1:
Django使用类变量来定义字段,但用于使其工作的元编程魔力要求您使用它们预定义的字段类,以便它可以从数据库中动态填充字段。您使用静态列表定义了该字段:
此定义不允许它从数据库动态获取数据,但更重要的是,在创建由模型定义表示的表时,它没有正确定义该列。每个字段表示数据库中的一列,如果您没有使用django.models公司它不会创建字段。你知道吗
这些都包含在入门文档中。你知道吗
相关问题 更多 >
编程相关推荐