(22-02-26)
UserAdminエラー
ログイン・ページにログインしているユーザー・エントリで、ユーザーを追加しようとすると、次のエラーが発生します.
フィールドにユーザー名フィールドを定義していませんか?
長期公式文書ModelAdmin。readonly_fields
フィールドが
したがって、
ユーザーを作成したら、ユーザーを変更できるページに移動します.
foreignkey移行エラー
接続されたモデルは存在する必要があるようです.
解決:
新しく作成されたcategoryモデルとJobモデルで作成された
settings.pyでは、
すると、エラーメッセージには同じ名前のテーブルがすでに存在することが表示されます.
ログイン・ページにログインしているユーザー・エントリで、ユーザーを追加しようとすると、次のエラーが発生します.
フィールドにユーザー名フィールドを定義していませんか?
#django.contrib.auth.admin
@admin.register(User)
class UserAdmin(admin.ModelAdmin):
add_form_template = 'admin/auth/user/add_form.html'
change_user_password_template = None
fieldsets = (
(None, {'fields': ('username', 'password')}),
(_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}),
(_('Permissions'), {
'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions'),
}),
(_('Important dates'), {'fields': ('last_login', 'date_joined')}),
)
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('username', 'password1', 'password2'),
}),
)
...
UserAdmin
として定義されるソースコード.add_fieldsets
項にusername
フィールドが記載されていることがわかる.UserAdmin
が定義を継承するため、入力するフィールドセットを「admin」ページで定義する必要があります.class MyAdminAccounts(UserAdmin):
model = Account
list_display = ('email','first_name','last_name','is_employee', 'is_employer')
list_filter = ('email', 'first_name', 'last_name', 'is_employee', 'is_employer')
search_fields = ('email', 'first_name', 'last_name')
ordering = ('email', 'first_name')
#readonly_fields = ['date_joined']
add_fieldsets = (
(None, {
'classes':('wide',),
'fields':('email','first_name','last_name','password1','password2','is_employee', 'is_employer','is_active')
}),
)
スタックオーバーフローadd fieldsets add_fieldsets
:ユーザーの作成時に表示される設定fieldsets
:Adminページユーザーの変更時に表示される設定長期公式文書ModelAdmin。readonly_fields
フィールドが
auto_now_add=True
に設定されている場合は、変更、生成できない場合があります.徳民は割引価格で、すべてのフィールドはeditable
です.したがって、
auto_now
またはauto_now_add
の属性がTrueのフィールドはmodeladminでは変更できません.class MyAdminAccounts(UserAdmin):
model = Account
list_display = ('email','first_name','last_name','is_employee', 'is_employer')
list_filter = ('email', 'first_name', 'last_name', 'is_employee', 'is_employer')
search_fields = ('email', 'first_name', 'last_name')
ordering = ('email', 'first_name')
readonly_fields = ['date_joined']
...
ユーザーを作成したら、ユーザーを変更できるページに移動します.
fieldsets
度を定義する必要があります.from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import Account
# Register your models here.
class MyAdminAccounts(UserAdmin):
model = Account
list_display = ('email','first_name','last_name','is_employee', 'is_employer')
list_filter = ('email', 'first_name', 'last_name', 'is_employee', 'is_employer')
search_fields = ('email', 'first_name', 'last_name')
ordering = ('email', 'first_name')
readonly_fields = ['date_joined']
fieldsets = (
(None, {'classes': ('wide',), 'fields': ('email', 'first_name', 'last_name', 'password')}),
('Permissionsl', {'fields':('is_staff', 'is_active','is_employee', 'is_employer')})
)
# The add_fieldsets class variable is used to define the fields that will be displayed on the create user page.
add_fieldsets = (
(None, {
# The classes key sets any custom CSS classes we want to apply to the form section.
'classes':('wide',),
# The fields key sets the fields you wish to display in your form.
'fields':('email','first_name','last_name','password1','password2','is_employee', 'is_employer','is_active')
}),
)
admin.site.register(Account, MyAdminAccounts)
次に更新し、foreignkey移行エラー
from django.conf import settings
from django.db import models
# Create your models here.
from django.template.defaultfilters import slugify
class Category(models.Model):
title = models.CharField(max_length=100)
slug = models.SlugField(editable=False, default=None)
def __str__(self):
return self.title
def save(self, *args, **kwargs):
self.slug = slugify(self.title)
super().save(*args, **kwargs)
class Job(models.Model):
title = models.CharField(max_length=200)
company = models.CharField(max_length=300)
CHOICES = (
('full_time', 'Full Time'),
('part_time', 'Part Time'),
('freelance', 'Freelance'),
('internship', 'Internship'),
('temporary', 'Temporary'),
)
job_type = models.CharField(max_length=200, blank=False, default=None, choices=CHOICES)
location = models.CharField(max_length=200, blank=False, default=None)
description = models.TextField(blank=False, default=None)
publishing_date = models.DateTimeField(auto_now_add=True)
slug = models.SlugField(default=None, editable=False)
employer = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, default=None)
category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='jobs')
def save(self, *args, **kwargs):
self.slug = slugify(self.title)
super().save(*args, **kwargs)
def __str__(self):
return self.title
class Meta:
ordering = ('-id',)
前述したように、移行を行うとエラーメッセージが出力されます.django.db.utils.IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`dolphin`.`#sql-db11_81`, CONSTRAINT `jobs_job_category_id_fd8331ed_fk_jobs_category_id` FOREIGN KEY (`category_id`) REFERENCES `jobs_category` (`id`))')
既存のインスタンスが所有するforeignkey
がないため、既存のJobモデルにforeignkey
フィールドが新しく作成されました.接続されたモデルは存在する必要があるようです.
解決:
新しく作成されたcategoryモデルとJobモデルで作成された
foreignkey
フィールドについてコメント、移行、移行を行います.settings.pyでは、
DATABASE
エントリにOPTIONS
が追加されます.DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
...
'HOST': 'localhost',
'PORT': '3306',
'OPTIONS': {
"init_command" : "SET foreign_key_checks = 0",
# foreignkey의 "반드시 관계가 연결되어 있어야 함"을 꺼버린다.
}
}
}
コメントが処理された部分を返し、再移行、移行します.すると、エラーメッセージには同じ名前のテーブルがすでに存在することが表示されます.
django.db.utils.OperationalError: (1050, "Table 'jobs_category' already exists")
テーブルのパージ、再移行、移行.Reference
この問題について((22-02-26)), 我々は、より多くの情報をここで見つけました https://velog.io/@hamkua/22-02-26テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol