gpt4 book ai didi

python - 管理表格内联上的自定义模型表单出现完整性错误

转载 作者:太空宇宙 更新时间:2023-11-03 19:50:58 27 4
gpt4 key购买 nike

我制作了一个自定义模型表单,以便我可以更改标题文本:

表单.py

class AddRoomAddRoomExtrasForm(ModelForm):
roomextrafields = forms.ModelChoiceField(queryset=RoomExtra.objects.all(), label=_('Room Extras'))

class Meta:
model = RoomExtra
fields = ('roomextrafields', )

admin.py

class RoomExtraInLine(admin.TabularInline):
model = Room.roomextra.through
extra = 1
verbose_name = _('extra')
verbose_name_plural = _('extras')
form = AddRoomAddRoomExtrasForm

class RoomAdmin(admin.ModelAdmin):
model = Room
inlines = [RoomExtraInLine, ]
exclude = ['roomextra', ]

模型.py

class Room(models.Model):
roomextra = models.ManyToManyField(
to='hotel.RoomExtra',
related_name='room_extras',
)

但我收到错误:

IntegrityError at /admin/hotel/room/add/
NOT NULL constraint failed: hotel_room_roomextra.roomextra_id

回溯

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/admin/hotel/room/add/

Django Version: 2.2.9
Python Version: 3.8.0
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'whitenoise.runserver_nostatic',
'django.contrib.staticfiles',
'users',
'hotel',
'reservation',
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount']
Installed Middleware:
('whitenoise.middleware.WhiteNoiseMiddleware',
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware')



Traceback:

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/db/backends/utils.py" in _execute
84. return self.cursor.execute(sql, params)

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py" in execute
383. return Database.Cursor.execute(self, query, params)

The above exception (NOT NULL constraint failed: hotel_room_roomextra.roomextra_id) was the direct cause of the following exception:

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/core/handlers/exception.py" in inner
34. response = get_response(request)

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/core/handlers/base.py" in _get_response
115. response = self.process_exception_by_middleware(e, request)

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/core/handlers/base.py" in _get_response
113. response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/contrib/admin/options.py" in wrapper
606. return self.admin_site.admin_view(view)(*args, **kwargs)

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/utils/decorators.py" in _wrapped_view
142. response = view_func(request, *args, **kwargs)

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
44. response = view_func(request, *args, **kwargs)

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/contrib/admin/sites.py" in inner
223. return view(request, *args, **kwargs)

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/contrib/admin/options.py" in add_view
1645. return self.changeform_view(request, None, form_url, extra_context)

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/utils/decorators.py" in _wrapper
45. return bound_method(*args, **kwargs)

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/utils/decorators.py" in _wrapped_view
142. response = view_func(request, *args, **kwargs)

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/contrib/admin/options.py" in changeform_view
1529. return self._changeform_view(request, object_id, form_url, extra_context)

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/contrib/admin/options.py" in _changeform_view
1573. self.save_related(request, form, formsets, not add)

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/contrib/admin/options.py" in save_related
1116. self.save_formset(request, form, formset, change=change)

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/contrib/admin/options.py" in save_formset
1104. formset.save()

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/forms/models.py" in save
669. return self.save_existing_objects(commit) + self.save_new_objects(commit)

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/forms/models.py" in save_new_objects
807. self.new_objects.append(self.save_new(form, commit=commit))

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/forms/models.py" in save_new
947. return super().save_new(form, commit=commit)

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/forms/models.py" in save_new
646. return form.save(commit=commit)

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/forms/models.py" in save
458. self.instance.save()

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/db/models/base.py" in save
740. self.save_base(using=using, force_insert=force_insert,

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/db/models/base.py" in save_base
777. updated = self._save_table(

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/db/models/base.py" in _save_table
870. result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/db/models/base.py" in _do_insert
907. return manager._insert([self], fields=fields, return_id=update_pk,

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/db/models/manager.py" in manager_method
82. return getattr(self.get_queryset(), name)(*args, **kwargs)

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/db/models/query.py" in _insert
1186. return query.get_compiler(using=using).execute_sql(return_id)

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/db/models/sql/compiler.py" in execute_sql
1368. cursor.execute(sql, params)

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/db/backends/utils.py" in execute
99. return super().execute(sql, params)

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/db/backends/utils.py" in execute
67. return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/db/backends/utils.py" in _execute_with_wrappers
76. return executor(sql, params, many, context)

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/db/backends/utils.py" in _execute
84. return self.cursor.execute(sql, params)

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/db/utils.py" in __exit__
89. raise dj_exc_value.with_traceback(traceback) from exc_value

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/db/backends/utils.py" in _execute
84. return self.cursor.execute(sql, params)

File "/Users/leonhughes/Documents/virtualenvs/django/hlms/env/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py" in execute
383. return Database.Cursor.execute(self, query, params)

Exception Type: IntegrityError at /admin/hotel/room/add/
Exception Value: NOT NULL constraint failed: hotel_room_roomextra.roomextra_id

但是当我使用标准形式时,即。注释掉:

form = AddRoomAddRoomExtrasForm

一切都正确保存,并且没有完整性错误。为了使功能达到预期效果,我还需要向自定义表单添加什么?

更新

根据 @Chris 的建议,我更改了 Meta 字段,因此表单类变为:

class AddRoomAddRoomExtrasForm(forms.ModelForm):
roomextrafields = forms.ModelChoiceField(queryset=RoomExtra.objects.all(), label=_('Room Extras'))

class Meta:
model = Room.roomextra.through
fields = ('roomextrafields', )

但出现同样的错误

最佳答案

因为我想做的就是更改表格中的列标签,所以我能够将表单更改为:

class AddRoomAddRoomExtrasForm(forms.ModelForm):

class Meta:
model = Room.roomextra.through
fields = '__all__'
labels = {
'roomextra': _('Room Extra(s)'),
}

问题出在自定义字段上。测试时设置为“全部”允许模型保存

关于python - 管理表格内联上的自定义模型表单出现完整性错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59847339/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com