在Python/Django中更改MySQL中同一列的每一行的值?
我在Django有一个这样的模型:在Python/Django中更改MySQL中同一列的每一行的值?,python,mysql,django,Python,Mysql,Django,我在Django有一个这样的模型: class Source_info(models.Model): user = models.ForeignKey(User) session_name = models.TextField() server_uname_path = models.TextField() server_name = models.TextField() server_fullpath = models.TextField() s
class Source_info(models.Model):
user = models.ForeignKey(User)
session_name = models.TextField()
server_uname_path = models.TextField()
server_name = models.TextField()
server_fullpath = models.TextField()
source_username = models.TextField()
make_default = models.TextField()
我得到的make_默认值为:
make_default = request.POST.get('make_default', True)
如果用户检查make_,则默认值为
'on'
,否则为True
。一个用户只能有一个默认值,即每个用户只能有一个'on'
。因此,如果用户选中makedefault,我想将上一个值从on改为'True'
。我怎样才能做到这一点 我是这样理解你的问题的:每个用户最多可以有一个源信息作为默认值。因此,当用户选择此Source\u info
作为默认值时,您希望取消选择该用户的所有其他选项
您在这方面遇到困难的原因是您的模型设置错误。如果每个用户最多有一个默认值Source\u info
,则需要将其作为用户模型上的外键,而不是Source\u info
模型上的标志。所以你应该写:
class User(models.Model):
# ... other fields ...
default_source_info = models.ForeignKey('Source_info', null = True)
(如果每个用户只有一个默认值Source\u info
,则可以省略null=True
)
如果所讨论的用户
模型来自django.contrib.auth
,那么您应该看到django文档中的“”部分。我认为您应该将models.field更改为make_default=models.BooleanField(default=True)
大多数字段使用models.TextField()
,为什么?因为我懒得使用CharField和max_length。是的,我把它改成了BooleanField。我仍然想要我的案例。如果用户现在选择make_default,值将是1。我希望所有1的值都转移到0。是的,一个用户只能有一个默认值。没有名为Source_info的表来执行外键。我想在用户检查新的默认值时删除其他默认值。当你说“没有名为Source\u info的表来执行外键”时,你是什么意思?Source\u info从哪里来?默认的\u source\u info=models.ForeignKey(source\u info,null=True)source\u info
是您在上面帖子中的模型类名称。根据定义模型的顺序,您可能需要对其进行报价。我编辑了我的答案以展示如何做。
def your_view(request, id):
#change the current make_default into False
default = SourceInfo.objects.get(user=request.user, make_default=True)
default.make_default = False
default.save()
#the new make_default for user
source = get_object_or_404(SourceInfo, pk=id)
source.make_default = True
source.save()
.................