Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django.db.utils.IntegrityError:唯一约束失败:模式\设置。用户\ id_Python_Django - Fatal编程技术网

Python django.db.utils.IntegrityError:唯一约束失败:模式\设置。用户\ id

Python django.db.utils.IntegrityError:唯一约束失败:模式\设置。用户\ id,python,django,Python,Django,我是Javascript新手,目前正在学习调试控制台中接收到的错误 在我的项目中,我为每个登录网站的用户添加了一个主题选择选项。当前,当我单击按钮时,它显示了2个主题,但它没有为每个用户保存主题 我已经在Django项目中创建了一个应用程序,除了在控制台中每次从按钮中选择主题时都会收到错误外,所有内容都与我下面的教程中介绍的内容相同: (index):573 POST http://127.0.0.1:8000/update_theme/ 500 (Internal Server Error)

我是Javascript新手,目前正在学习调试控制台中接收到的错误

在我的项目中,我为每个登录网站的用户添加了一个主题选择选项。当前,当我单击按钮时,它显示了2个主题,但它没有为每个用户保存主题

我已经在Django项目中创建了一个应用程序,除了在控制台中每次从按钮中选择主题时都会收到错误外,所有内容都与我下面的教程中介绍的内容相同:

(index):573 POST http://127.0.0.1:8000/update_theme/ 500 (Internal Server Error)
并且在终端中出现此错误:

    <link id="mystylesheet" href="{% static 'css/app-light.css' %}" type="text/css" rel="stylesheet">
        <!-- Mode -->
        <div id="mode" class="section" style="padding-top: 1rem; padding-bottom: 3rem;text-align: right">
            <button onclick="swapStyles('app-light.css')" type="button" class="btn btn-secondary">Light Mode</button>
            <button onclick="swapStyles('app-dark.css')" type="button" class="btn btn-dark">Dark Mode</button>
        </div>
        <!-- Mode -->
django.db.utils.IntegrityError:唯一约束失败:模式设置。用户id

这是基本模板:

    <link id="mystylesheet" href="{% static 'css/app-light.css' %}" type="text/css" rel="stylesheet">
        <!-- Mode -->
        <div id="mode" class="section" style="padding-top: 1rem; padding-bottom: 3rem;text-align: right">
            <button onclick="swapStyles('app-light.css')" type="button" class="btn btn-secondary">Light Mode</button>
            <button onclick="swapStyles('app-dark.css')" type="button" class="btn btn-dark">Dark Mode</button>
        </div>
        <!-- Mode -->
这是视图。py


def userSettings(request):
    user = request.user
    setting = getattr(user, 'setting', None)

    if setting:
        seralizer = UserSerailizer(setting, many=False)
        return JsonResponse(seralizer.data, safe=False)
    else:
        return JsonResponse({'message': "User don't have a setting."}, safe=False)


def updateTheme(request):
    data = json.loads(request.body)
    theme = data['theme']

    user=request.user
    setting = Setting.objects.get_or_create(user=user, value=theme, name=user.username)
    setting.save()
    print('Request:', theme)
    return JsonResponse('Updated..', safe=False)
app_name = 'mode'


urlpatterns = [
    path('user_settings/', views.userSettings, name="user_settings"),
    path('update_theme/', views.updateTheme, name="update_theme"),
]
from .models import *

class UserSerailizer(serializers.ModelSerializer):
    class Meta:
        model = Setting
        fields = '__all__'
url.py


def userSettings(request):
    user = request.user
    setting = getattr(user, 'setting', None)

    if setting:
        seralizer = UserSerailizer(setting, many=False)
        return JsonResponse(seralizer.data, safe=False)
    else:
        return JsonResponse({'message': "User don't have a setting."}, safe=False)


def updateTheme(request):
    data = json.loads(request.body)
    theme = data['theme']

    user=request.user
    setting = Setting.objects.get_or_create(user=user, value=theme, name=user.username)
    setting.save()
    print('Request:', theme)
    return JsonResponse('Updated..', safe=False)
app_name = 'mode'


urlpatterns = [
    path('user_settings/', views.userSettings, name="user_settings"),
    path('update_theme/', views.updateTheme, name="update_theme"),
]
from .models import *

class UserSerailizer(serializers.ModelSerializer):
    class Meta:
        model = Setting
        fields = '__all__'
序列化程序.py


def userSettings(request):
    user = request.user
    setting = getattr(user, 'setting', None)

    if setting:
        seralizer = UserSerailizer(setting, many=False)
        return JsonResponse(seralizer.data, safe=False)
    else:
        return JsonResponse({'message': "User don't have a setting."}, safe=False)


def updateTheme(request):
    data = json.loads(request.body)
    theme = data['theme']

    user=request.user
    setting = Setting.objects.get_or_create(user=user, value=theme, name=user.username)
    setting.save()
    print('Request:', theme)
    return JsonResponse('Updated..', safe=False)
app_name = 'mode'


urlpatterns = [
    path('user_settings/', views.userSettings, name="user_settings"),
    path('update_theme/', views.updateTheme, name="update_theme"),
]
from .models import *

class UserSerailizer(serializers.ModelSerializer):
    class Meta:
        model = Setting
        fields = '__all__'
我的问题我收到此错误的原因以及如何修复它?

您使用的是错误的,因为您按所有字段进行筛选,并且在数据库中找不到已存在的实例,这将导致get\u或\u create尝试创建另一个实例

因此,您应该将只需要更新为默认值的字段移动到文档中

setting = Setting.objects.get_or_create(user=user, defaults={'value': theme, 'name'= user.username)

另外

  • user.username
    存储为字段是数据重复,这毫无意义
  • get\u或\u create
    之后调用
    setting.save()
    是不必要的,因为您可以使用

我遵循您的代码,主题保存在DB中,我同意您关于
update\u或\u create
的看法,但现在当我刷新页面时,它返回到light主题,尽管它保存为
app dark.css
在控制台中,我收到
数据:{消息:“用户没有设置。”}消息:“用户没有设置。”__proto__:Object
如果您有更多问题要问新问题,则这似乎与问题中描述的问题无关