Пожалуйста исправьте ошибки ниже

I have made custom BaseUserManager to create user but I am getting error of «please correct the errors below» when I add user from django admin panel and I can’t find what’s going wrong.

Models.py:

class UserManager(BaseUserManager):

    def create_user(self,email,password):
        user = self.model(email=email)
        user.set_password(password)

    def create_superuser(self,email,password):
        user = self.model(email=email)
        user.set_password(password)
        user.is_admin = True
        user.is_superuser = True
        user.is_staff=True
        user.save(using=self._db)




class User(AbstractBaseUser,PermissionsMixin):

    COMPANY='CO'
    EMPLOYEE='EM'
    STATUS_CHOICES=(
        (COMPANY,'Company'),
        (EMPLOYEE,'Employee'),
    )
    Status=models.CharField(max_length=2,
                            choices=STATUS_CHOICES,
                            default=EMPLOYEE)
    user_image = models.CharField(max_length=100)
    is_admin=models.BooleanField()
    email=models.EmailField(unique=True)
    is_staff=models.BooleanField(default=False)
    object = UserManager()
    USERNAME_FIELD='email'
    REQUIRED_FIELDS = []

    objects=models.Manager()

    def get_short_name(self):
        return self.email

Admin.py files:

class UserAdmin(UserAdmin):
    list_display = ('email', 'is_admin')
    list_filter = ('is_admin',)

    fieldsets = (
        (None, {'fields': ('email', 'password','Status','user_image','last_login')}),

        ('Permissions', {'fields': ('is_admin','is_staff','is_superuser','user_permissions','groups')}),
    )

    add_fieldsets= (
        (None, {'fields': ('email', 'password','Status','user_image','last_login')}),

        ('Permissions', {'fields': ('is_admin','is_staff','is_superuser','user_permissions','groups')}),
    )

    search_fields = ('password',)
    ordering = ('password',)
    filter_horizontal = ()



admin.site.register(User,UserAdmin)
admin.site.register(Company)
admin.site.register(Employee)
admin.site.register(Job)
admin.site.register(AppliedJobs)

Can someone suggest what I am doing wrong? I always get the error when I add user from admin panel.I can’t figure out as I am working first time on baseusermanager.

Здравствуйте столкнулся с проблемой в django с правами пользователя.

Для юзера с группой в которую не входит возможность редактировать модели указные в inlines. При сохранении от лица юзера, выбивается ошибка «Пожалуйста, исправьте ошибки ниже.» Но при этом ни какое из полей не подсвечивается.

введите сюда описание изображения

Хитрым трюком при изменении прав и сохранив модель без прегезагрузки страницы мне удалось увидеть эти ошибки. Как тогда понимать что эти поля пустые, если на первом скриншоте видно что поля не пустые?

введите сюда описание изображения

И соответственно перезагрузив страницу с all правами, все поля заполненные, и модель сохраняется без проблем. Но мне надо огранчить возможность удалять и изменять inlines модели для пользователя.

введите сюда описание изображения
Помогите пожалуйста, вылечить данный баг!(

Если нужны будут дополнительные сведения пишите предоставлю, но ни каких проблем в коде я не встречаю.

UPDATE

models.py

# Product stock

class Stock(models.Model):
    invoice = models.CharField(max_length=255, default="", verbose_name="№ Наклданой")
    date_create = models.DateTimeField(auto_now_add=True, verbose_name="Дата поступления")

class Meta:
    verbose_name = 'Поступление'
    verbose_name_plural = 'Поступления'
    ordering = ["-pk"]

def __str__(self):
    return self.invoice



class StockProduct(models.Model):
    Stock = models.ForeignKey(Stock, on_delete=models.CASCADE, verbose_name="Накладная", null=True)
    product = models.ForeignKey(Product, on_delete=models.CASCADE, verbose_name="Модель")
    value = models.IntegerField(verbose_name="Количество товара", default=0)

class Meta:
    verbose_name = 'Дверь'
    verbose_name_plural = 'Двери'

def __str__(self):
    return self.product.title

def save(self, *args, **kwargs):
    model = Product.objects.filter(pk=self.product.pk).first()
    model.value = model.value + self.value
    model.save()
    super(StockProduct, self).save(*args, **kwargs)


class StockMDF(models.Model):
     Stock = models.ForeignKey(Stock, on_delete=models.CASCADE, verbose_name="Накладная", null=True)
     mdf = models.ForeignKey(MDF, on_delete=models.CASCADE, verbose_name="МДФ панель")
     value = models.IntegerField(verbose_name="Количество товара", default=0)

def __str__(self):
    return self.mdf.title

class Meta:
    verbose_name = 'МДФ панель'
    verbose_name_plural = 'МДФ панели'

def save(self, *args, **kwargs):
    model = MDF.objects.filter(pk=self.mdf.pk).first()
    model.value = model.value + self.value
    model.save()
    super(StockMDF, self).save(*args, **kwargs)


 class StockLockCylinder(models.Model):
    Stock = models.ForeignKey(Stock, on_delete=models.CASCADE, verbose_name="Накладная", null=True)
    lockcylinder = models.ForeignKey(LockCylinder, on_delete=models.CASCADE, verbose_name="Цилиндр замка")
    value = models.IntegerField(verbose_name="Количество товара", default=0)

def __str__(self):
    return self.lockcylinder.title

class Meta:
    verbose_name = 'цилиндр замка'
    verbose_name_plural = 'цилиндры замков'

def save(self, *args, **kwargs):
    model = LockCylinder.objects.filter(pk=self.lockcylinder.pk).first()
    model.value = model.value + self.value
    model.save()
    super(StockLockCylinder, self).save(*args, **kwargs)

admin.py

from django.contrib import admin
from .models import *


class HideAdmin(admin.ModelAdmin):
    get_model_perms = lambda self, req: {}


class StockProductAdmin(admin.StackedInline):
    model = StockProduct
    extra = 1


class StockMDFAdmin(admin.StackedInline):
    model = StockMDF
    extra = 1


class StockLockCylinderAdmin(admin.StackedInline):
    model = StockLockCylinder
    extra = 1


class StockAdmin(admin.ModelAdmin):
    readonly_fields = ['date_create']
    inlines = (StockProductAdmin, StockMDFAdmin, StockLockCylinderAdmin)


# Register your models here.
admin.site.register(Maker, admin.ModelAdmin)
admin.site.register(SizeDoor, admin.ModelAdmin)
admin.site.register(LockCylinder, admin.ModelAdmin)
admin.site.register(MDF, admin.ModelAdmin)
admin.site.register(Product, admin.ModelAdmin)
admin.site.register(Stock, StockAdmin)

UDPATE 20.12.18

Данная проблема возникает с любой моделью, которая, указана как StackedInline также такая проблема возникает у моделей StackedInline с полем read only.

Version Info:
Django — 2.1.3

Уведомления

  • Начало
  • » Django
  • » «Пожалуйста, исправьте ошибки ниже. » в админке — как лечить

#1 Июль 23, 2010 18:40:24

«Пожалуйста, исправьте ошибки ниже. » в админке — как лечить

Вылезла такая ошибка, не знаю что делать
При попытке редактировании некоторой модели постоянно не проходит валидацию формы, причем в каком поле ошибка не пишет
вот модель:

class Machine(models.Model):
serial = models.CharField(max_length=30, blank=True, null=True)
client = models.ForeignKey(Client, related_name="machines")
# customer = models.ForeignKey(Client, blank=True, null=True, related_name="machines_customer")
alias = models.CharField(max_length=30, blank=True)
machinemark = models.ForeignKey(MachineMark)
month = models.IntegerField()
motohours = models.IntegerField()

пробовал и с закомментированной строчкой, и без — одно и тоже
с остальными моделями в проекте все нормально

Офлайн

  • Пожаловаться

#2 Июль 23, 2010 18:45:16

«Пожалуйста, исправьте ошибки ниже. » в админке — как лечить

ах да, деталь в картину: пробовал точно те же данные ввести в inlineadmin для этой модели — все сохранилось! не вылезла ошибка валидации формы.
Как отладить?

Офлайн

  • Пожаловаться

#3 Июль 23, 2010 18:45:59

«Пожалуйста, исправьте ошибки ниже. » в админке — как лечить

скорее всего есть некоторое обязательно поле (например у тебя это может быть client, или machinemark, или month, или motohours) и ты не прописал его в классе в admin.py. Так что admin.py в студию.

Офлайн

  • Пожаловаться

#4 Июль 23, 2010 18:47:01

«Пожалуйста, исправьте ошибки ниже. » в админке — как лечить

inlineadmin — это совсем другая модель, которая видимо нормально описана в admin.py.

Офлайн

  • Пожаловаться

#5 Июль 23, 2010 18:50:16

«Пожалуйста, исправьте ошибки ниже. » в админке — как лечить

локализировал проблему:

class MachineAdmin(admin.ModelAdmin):
inlines = [#ReportInline, \
# FixInline, \
# MaintenanceInline, \
# CheckupInline, \
# UploadInline, \
]

вот так работает. с инлайнами — непроходит валидацию
расскажите, как инлайны могут влиять на валидацию формы?

Офлайн

  • Пожаловаться

#6 Июль 23, 2010 18:56:08

«Пожалуйста, исправьте ошибки ниже. » в админке — как лечить

проблема была в моем кастомном фильтре для обрезания пустых форм из формсета для инлайна. подскажите, как без него убрать три лишних записи в каждом инлайне пустых?

@register.filter(name='rstrip_inline_formset')
def rstrip_inline_formset(value, args):

count = 0
for form in value:
count += 1

i = 0
result = []
for form in value:
i += 1
if i>count-args:
break
result.append(form)

return result

Офлайн

  • Пожаловаться

#7 Июль 23, 2010 18:58:17

«Пожалуйста, исправьте ошибки ниже. » в админке — как лечить

vaxXxa
скорее всего есть некоторое обязательно поле (например у тебя это может быть client, или machinemark, или month, или motohours) и ты не прописал его в классе в admin.py. Так что admin.py в студию.

не, не в admin.py дело, а в фильтре для шаблона инлайнов, который три пустых записи режет
чем бы его более красивым заменить?.. искал, как заставить не выводить 3 пустые записи в конце каждого инлайна, не нашел

Офлайн

  • Пожаловаться

#8 Июль 23, 2010 23:06:21

«Пожалуйста, исправьте ошибки ниже. » в админке — как лечить

ну, в инлайновых классах есть атрибут extra. Он отвечает за количество инлайновых полей.

Офлайн

  • Пожаловаться

#9 Июль 24, 2010 23:21:24

«Пожалуйста, исправьте ошибки ниже. » в админке — как лечить

vaxXxa
ну, в инлайновых классах есть атрибут extra. Он отвечает за количество инлайновых полей.

спасибо, то, что нужно!

Офлайн

  • Пожаловаться

  • Начало
  • » Django
  • » «Пожалуйста, исправьте ошибки ниже. » в админке — как лечить

Модели создаются из следующей базы данных mysql с «python manage.py inspectdb —database = mydatabasename»:

CREATE TABLE `authors` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) DEFAULT NULL,
  `birthday` date DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

CREATE TABLE `books` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `titel` varchar(45) DEFAULT NULL,
  `year` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

CREATE TABLE `authors_books` (
  `author_id` int(11) NOT NULL,
  `book_id` int(11) NOT NULL,
  KEY `fk_authors_books
class Authors(models.Model):
    name = models.CharField(max_length=45, blank=True, null=True)
    birthday = models.DateField(blank=True, null=True)

    class Meta:
        managed = True
        db_table = 'authors'
        verbose_name_plural = 'Authors'  

    def __unicode__(self):
        return self.name


class AuthorsBooks(models.Model):
    author_id = models.OneToOneField('Authors', models.DO_NOTHING, db_column='author_id', primary_key=True)
    book_id = models.OneToOneField('Books', models.DO_NOTHING, db_column='book_id', primary_key=True)

    class Meta:
        managed = True
        db_table = 'authors_books'
        unique_together = (('author_id', 'book_id'),)
        verbose_name_plural = 'Author Books'         


class Awards(models.Model):
    author = models.OneToOneField('Authors', models.DO_NOTHING, db_column='author', primary_key=True)
    award_name = models.CharField(max_length=45)
    year = models.IntegerField(blank=True, null=True)

    class Meta:
        managed = True
        db_table = 'awards'
        unique_together = (('author', 'award_name'),)
        verbose_name_plural = 'Awards' 


class Books(models.Model):
    titel = models.CharField(max_length=45, blank=True, null=True)
    year = models.IntegerField(blank=True, null=True)

    class Meta:
        managed = True
        db_table = 'books'
        verbose_name_plural = 'Books' 

    def __unicode__(self):
        return '{} - {}'.format(self.titel, self.year)

idx` (`book_id`),
KEY `fk_authors_books_1` (`author_id`),
CONSTRAINT `fk_authors_books_1` FOREIGN KEY (`author_id`) REFERENCES `authors` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_authors_books_2` FOREIGN KEY (`book_id`) REFERENCES `books` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `awards` (
`author` int(11) NOT NULL,
`award_name` varchar(45) NOT NULL,
`year` int(11) DEFAULT NULL,
PRIMARY KEY (`author`,`award_name`),
CONSTRAINT `fk_awards_1` FOREIGN KEY (`author`) REFERENCES `authors` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Модели выглядят так:

class Authors(models.Model):
    name = models.CharField(max_length=45, blank=True, null=True)
    birthday = models.DateField(blank=True, null=True)

    class Meta:
        managed = True
        db_table = 'authors'
        verbose_name_plural = 'Authors'  

    def __unicode__(self):
        return self.name


class AuthorsBooks(models.Model):
    author_id = models.OneToOneField('Authors', models.DO_NOTHING, db_column='author_id', primary_key=True)
    book_id = models.OneToOneField('Books', models.DO_NOTHING, db_column='book_id', primary_key=True)

    class Meta:
        managed = True
        db_table = 'authors_books'
        unique_together = (('author_id', 'book_id'),)
        verbose_name_plural = 'Author Books'         


class Awards(models.Model):
    author = models.OneToOneField('Authors', models.DO_NOTHING, db_column='author', primary_key=True)
    award_name = models.CharField(max_length=45)
    year = models.IntegerField(blank=True, null=True)

    class Meta:
        managed = True
        db_table = 'awards'
        unique_together = (('author', 'award_name'),)
        verbose_name_plural = 'Awards' 


class Books(models.Model):
    titel = models.CharField(max_length=45, blank=True, null=True)
    year = models.IntegerField(blank=True, null=True)

    class Meta:
        managed = True
        db_table = 'books'
        verbose_name_plural = 'Books' 

    def __unicode__(self):
        return '{} - {}'.format(self.titel, self.year)

В классе AuthorsBooks я изменил два внешних ключа на OneToOneFields.

Мой admin.py выглядит так:

from django.contrib import admin
from myapp.models import Authors
...
class AwardsInline(admin.TabularInline):
    model = Awards

class AuthorsBooksInline(admin.TabularInline):
    model = AuthorsBooks

class AuthorsAdmin(admin.ModelAdmin):
    list_display = ("name", "birthday" )
    inlines = (AwardsInline, AuthorsBooksInline)

class BooksAdmin(admin.ModelAdmin):
    list_display = ("id", "titel", "year" )

admin.site.register(Authors, AuthorsAdmin)
admin.site.register(Books, BooksAdmin)

Когда я пытаюсь изменить автора на странице администратора django, я получаю следующие ошибки: введите описание изображения здесь

Вопрос:

Я работаю над приложением Django, и я выполнил именно эти инструкции для создания пользовательского пользователя.

Теперь, когда я пытаюсь создать нового пользователя с панели администратора, я получаю это сообщение об ошибке enter image description here

поэтому не очень полезно. Также у меня такая же проблема, если я использую форму “изменить” или “создать” форму.

Однако, если я попытаюсь создать нового пользователя через оболочку, например

MyUser.objects.create_user(email="test@gmail.com", password=None)

оно работает.


Исправление проблем

Вот модель пользовательского пользователя:

class MyUser(AbstractBaseUser):
"""
A base user on the platform. Users are uniquely identified by
email addresses.
"""
email = models.EmailField(
verbose_name = "Email address",
max_length   = 100,
unique       = True
)
is_active  = models.BooleanField(default=True, blank=True)
is_admin   = models.BooleanField(default=False, blank=True)

@property
def is_staff(self):
return self.is_admin

objects = MyUserManager()

USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ()

def get_full_name(self):
return self.email

def get_short_name(self):
return self.email

def __unicode__(self):
return self.email

def has_perm(self, perm, obj=None):
'''Does the user have a specific permission?'''
return True

def has_module_perms(self, app_label):
'''Does the user have permissions to view the app 'app_label'?'''
return True
  • Одно из объяснений заключается в том, что оно имеет какое-то отношение к полю MyUser, у которого есть blank=False но которое не отображается моим ModelForm. Я дважды проверил, и все в порядке.

  • Еще одно объяснение заключается в том, что проверка формы создания администратора каким-то образом унаследовала от модели User django.contrib.auth по django.contrib.auth и она пытается найти поле User, которого нет в MyUser. Как я могу это проверить?

  • Есть идеи?

Лучший ответ:

Хорошо, ребята, спасибо за ваши ответы, но моя проблема действительно возникла из моего переопределения UserAdmin.

Более конкретно, UserAdmin использует add_form и form для ссылки на формы создания и изменения соответственно. Как я назвал мои переменные creation_form и change_form, он не отменяет django.contrib.auth.models.User формы и почему некоторые поля не проверять, потому что мой ModelForm не показывал эти User поля.

Теперь я переименовал creation_form в add_form и change_form, чтобы form внутри моего пользовательского UserAdmin, и он работает как шарм 🙂

Ответ №1

У меня была аналогичная проблема. Но это не было в форме администратора, это было в списке admin. Я использовал поля list_editable. Когда я буду сохранять изменения, я получаю сообщение “Пожалуйста, исправьте ошибку ниже”, ничего не подсвечивая.

Моя ошибка состояла в том, что я включил первое поле в list_display как list_editable. Чтобы исправить это, я добавляю ‘id’ в начало полей list_display.

Ответ №2

Я думаю, что это может помочь, потому что пароль CharField в AbstractBaseUser имеет blank свойство по умолчанию для False:

class MyUser(AbstractBaseUser):
def __init__(self, *args, **kwargs):
super(MyUser, self).__init__(*args, **kwargs)
passwd = [field for field in self._meta.fields if field.attname is 'password']
if passwd:
passwd[0].blank = True

Понравилась статья? Поделить с друзьями:

Интересное по теме:

  • Пожалуйста исправьте ошибку участник не прошел прескоринг
  • Пожалуйста сопоставьте watch call как исправить ошибку
  • Поезжайте на метро ошибка
  • Пожалуйста опишите свои действия на момент возникновения ошибки
  • Пожалуйста исправьте орфографические ошибки и перепишите следующие предложения

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии