我在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()
source_username = models.TextField()
make_default = models.TextField()
我的make_default值为:
make_default = request.POST.get('make_default', True)
如果用户检查make_default值为'on'
,则为True
。一个用户只能有一个make_default,即每个用户只有一个'on'
。因此,如果用户选中Make默认,我希望将之前的值更改为'True'
。我怎样才能做到这一点?
答案 0 :(得分:0)
以下是我理解您的问题的方法:每个用户最多只能有一个Source_info
作为默认值。因此,当用户选择此 Source_info
作为默认设置时,您希望取消选择该用户的所有其他。
你遇到这个困难的原因是你的模型设置错误。如果每个用户最多只有一个默认Source_info
,那么您需要将其作为用户模型上的外键,而不是Source_info
模型上的标志。所以你应该写一下:
class User(models.Model):
# ... other fields ...
default_source_info = models.ForeignKey('Source_info', null = True)
(如果每个用户完全一个默认Source_info
,那么您可以省略null = True
。)
如果有问题的User
模型是来自django.contrib.auth
的模型,那么您应该会在Django文档中看到“Extending the existing User model”部分。
答案 1 :(得分:0)
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()
.................