Модель User не зарегистрирована (django-4 admin.py)
Я пытаюсь дать User (модель по умолчанию django, не пользовательская модель) Адрес в представлении администратора. Я впервые работаю с разными версиями django в разных проектах, я делаю то же самое в Django 2 и это работает, а здесь я использую Django 4.
Это мой model.py:
Это мой admin.py:
from django.contrib import admin
from django.contrib.auth.models import User
from .models import Product, ProductEntry, EntryType, Opinion, Address
# Register your models here.
class AddresInline(admin.TabularInline):
model = Address
extra = 1
class UserAdmin(admin.ModelAdmin):
inlines = [AddresInline]
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
И последнее, settings.py:
Работая с пользовательской моделью django (не пользовательской моделью), я сначала снимаю регистрацию User и заново добавляю его с помощью UserAdmin.
Я полагаю, что проблема связана с вашим классом Address
, который использует ForeignKey
вместо OneToOneField
. С помощью OneToOneField
вы можете расширить модель по умолчанию User
. Вот что, на мой взгляд, должно работать:
class Address(models.Model):
street_name = models.CharField(max_length=60)
number = models.IntegerField()
block = models.IntegerField(null=True)
floor = models.IntegerField(null=True)
door = models.CharField(max_length=1, blank=True)
city = models.CharField(max_length=60)
code_postal = models.IntegerField()
# Change the user here to a OneToOneField:
user = models.OneToOneField(User, on_delete=models.CASCADE)
Если вы посмотрите docs для расширения стандартной модели User, вы увидите, что я имею в виду.
Расширение существующей модели пользователя
....
Если вы хотите хранить информацию, связанную с User, вы можете использовать поле OneToOneField к модели, содержащей поля для дополнительной информации. Такая модель один-к-одному часто называется моделью профиля, поскольку она может хранить информацию о пользователе сайта, не связанную с авторизацией. Для Например, вы можете создать модель Employee:
Я предполагаю, что вы использовали ForeignKey, поскольку многие пользователи могут иметь один и тот же адрес . Однако, вы все равно можете сделать адрес для каждого пользователя уникальным, т.е. OneToOneField
, и все детали адреса будут одинаковыми, только автоматически сгенерированный первичный ключ этих адресов будет одинаковым.
INSTALLED_APPS
были неправильно упорядочены.
У меня было так:
INSTALLED_APPS = [
'acme_nft_app.apps.AcmeNftConfig', #From
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'livereload',
'mathfilters']
Но мое приложение должно быть после django defaults:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'acme_nft_app.apps.AcmeNftConfig', #To
'livereload',
'mathfilters']