我有模型问题,其中包含所有用户列表字段。创建新用户后,用户字段没有更新,我需要重新运行服务器以查看更改,我不想这样做。
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'的字段
我遵循了这些提示:How can I have a Django signal call a model method?但仍然无法正常工作而且陷入困境。 谢谢你的帮助!
答案 0 :(得分:0)
正如评论中所述,您的Question
模型中没有名为user
的字段。您确实关闭的字段(users
)未正确定义。看起来您想要ForeignKey
字段或可能ManyToMany
字段,具体取决于您希望如何构建该关系。您应该查看docs on relationships以及如何在django ORM中处理它们。此外,您的静态方法update_users
似乎没有做太多。看起来您想要将所有用户添加到特定问题,但是您通过调用values_list
方法传递值列表:
userz = User.objects.values_list('id','username')
Question.objects.all().update(users=userz)
但是模型的更新方法可以直接获取对象,而无需进一步制作values_list
。我不知道你为什么会这样做,只是作为更新方法处理相关对象时期望的参数的一个例子:
Question.objects.all().update(users=Users.objects.all())
我相信使用values_list会出错。我强烈建议您查看the Django docs以了解ORM的使用情况。
顺便说一下......你不需要这样做:
def __str__(self):
return "{question_text}".format(question_text=self.question_text)
正如您在question_text
字段的定义中所看到的,它是一个字符串字段(CharField
)所以您可以这样做:
def __str__(self):
return self.question_text
编辑1:
Django使用类变量来定义字段,但用于使其工作的元编程魔法要求您使用其预定义的字段类,以便它可以动态填充数据库中的字段。您使用静态列表定义了该字段:
users = User.objects.values_list('id','username')
此定义不允许它从数据库中动态获取数据,但更重要的是,在创建由模型定义表示的表时,它不能正确定义该列。每个字段代表数据库中的一列,如果没有使用django.models模块中提供的正确字段类来定义它,则不会创建该字段。
这些都包含在入门文档中。