2016-03-06 2 views
3

В администраторе Django на моем веб-сайте в реальном времени форма для редактирования некоторых моделей пуста. Там должны быть поля, появляющиеся под желтой полосой:Django Admin не отображает поля

Example

По какой-то причине, это влияет только на две модели (пользователей и задания), а также другие модели работают нормально. Поля на затронутых моделях также появляются при тестировании веб-сайта на моем локальном сервере тестирования. Вот мой admin.py:

from django.contrib import admin 
from web.models import Address, User, WorkerProfile, EmployerProfile, Job, SupportIssue, LoginCode, ReferredEmail, InArea, AdminEmail 
from django.contrib.auth.models import Group 

class AddressAdmin(admin.ModelAdmin): 
    search_fields = ('name', 'zip',) 

class UserAdmin(admin.ModelAdmin): 
    search_fields = ('email', 'phone', 'role', 'address__zip',) 
    exclude = ('birthday', 'password', 'last_login', 'is_active',) 

class WorkerProfileAdmin(admin.ModelAdmin): 
    search_fields = ('user__email', 'user__phone', 'user__address__zip',) 

class EmployerProfileAdmin(admin.ModelAdmin): 
    search_fields = ('user__email', 'user__phone', 'user__address__zip',) 

class JobAdmin(admin.ModelAdmin): 
    search_fields = ('employer__user__email', 'employer__user__phone', 'worker__user__email', 'worker__user__phone', 'title', 'address__zip',) 
    exclude = ('is_hired', 'is_completed', 'employer_is_reviewed',) 

class SupportIssueAdmin(admin.ModelAdmin): 
    search_fields = ('email',) 

class LoginCodeAdmin(admin.ModelAdmin): 
    search_fields = ('email',) 

class ReferredEmailAdmin(admin.ModelAdmin): 
    search_fields = ('email', 'user__email',) 

class InAreaAdmin(admin.ModelAdmin): 
    search_fields = ('email', 'state',) 

class AdminEmailAdmin(admin.ModelAdmin): 
    search_fields = ('filter_value', 'subject', 'date',) 

admin.site.register(Address, AddressAdmin) 
admin.site.register(User, UserAdmin) 
admin.site.register(WorkerProfile, WorkerProfileAdmin) 
admin.site.register(EmployerProfile, EmployerProfileAdmin) 
admin.site.register(Job, JobAdmin) 
admin.site.register(SupportIssue, SupportIssueAdmin) 
admin.site.register(LoginCode, LoginCodeAdmin) 
admin.site.register(ReferredEmail, ReferredEmailAdmin) 
admin.site.register(InArea, InAreaAdmin) 
admin.site.register(AdminEmail, AdminEmailAdmin) 

admin.site.unregister(Group) 

Я сделал Миграции один мой сервер с командами:

python manage.py makemigrations APPNAME 
python manage.py migrate 
python manage.py syncdb 

Я также перезагрузил свой сервер, а admin.py файл в актуальном состоянии. Я использую django 1.8.5, apache 2.4 и MySQL. Кто-нибудь знает причину проблемы? Кто-нибудь имел проблему раньше или знал, как ее исправить?

Edit (models.py):

class Address(models.Model): 
    state_choices = (
     ('OH', 'Ohio'), 
    ) 

    name = models.CharField(max_length=255, verbose_name='Name') 
    street = models.CharField(max_length=255, verbose_name='Street Address') 
    city = models.CharField(max_length=31, verbose_name='City') 
    state = models.CharField(max_length=255, choices=state_choices, verbose_name='State') 
    zip = models.CharField(validators=[MinLengthValidator(5)], max_length=5, verbose_name='Zip Code') 

    def __str__ (self): 
     return self.name + ' ' + self.street + ' ' + self.city + ' ' + self.state + ' ' + self.zip 

class UserManager(BaseUserManager): 
    def create_user(self, first_name, last_name, email, phone, role, birthday, address, password): 
     user = self.model(first_name=first_name, last_name=last_name, email=email, phone=phone, role=role, birthday=birthday, address=address) 
     user.set_password(password) 
     user.admin_permission = False 
     user.save() 

     return user 

    def create_superuser(self, first_name, last_name, email, phone, birthday, password, address=None): 
     if not address: 
      address = Address(street='', city='', state='') 
      address.save() 

     user = self.create_user(first_name=first_name, last_name=last_name, email=email, phone=phone, role='Worker', birthday=birthday, address=address, password=password) 
     user.is_admin = True 
     user.admin_permission = True 
     user.save() 

     return user 

class User(AbstractBaseUser): 
    role_choices = (
     ('Worker', 'Worker'), 
     ('Employer', 'Employer'), 
    ) 

    objects = UserManager() 

    first_name = models.CharField(max_length=255, verbose_name='First Name') 
    last_name = models.CharField(max_length=255, verbose_name='Last Name') 
    email = models.EmailField(max_length=255, unique=True, verbose_name='Email Address') 
    phone = models.CharField(validators=[MinLengthValidator(10)], max_length=10, unique=True, verbose_name='Phone Number') 
    role = models.CharField(max_length=255, choices=role_choices, verbose_name='User Role') 
    birthday = models.DateField(auto_now=False, null=True, verbose_name='Birthday') 
    address = models.ForeignKey(Address, verbose_name='Address') 
    admin_permission = models.BooleanField() 
    is_active = models.BooleanField(default=True) 
    is_admin = models.BooleanField(default=False) 

    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = ['first_name', 'last_name', 'phone', 'birthday'] 

    def get_full_name(self): 
     return self.first_name + ' ' + self.last_name 

    def get_short_name(self): 
     return self.first_name 

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

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

    def has_perm(self, perm, obj=None): 
     return self.is_admin 

    def has_module_perms(self, app_label): 
     return self.is_admin 

    def __str__ (self): 
     return self.email 

class Job(models.Model): 
    wage_type_choices = (
     ('Hourly', 'Hourly'), 
     ('Total', 'Total'), 
    ) 

    employer = models.ForeignKey(EmployerProfile, verbose_name='Employer') 
    address = models.ForeignKey(Address, verbose_name='Address') 
    title = models.CharField(max_length=255, verbose_name='Job Title') 
    description = models.TextField(blank=False, verbose_name='Job Description') 
    completion_date = models.DateField(auto_now=False, auto_now_add=False, verbose_name='Completion Date', help_text='mm/dd/yyyy') 
    wage_type = models.CharField(max_length=255, choices=wage_type_choices, verbose_name='Wage Type') 
    wage = models.DecimalField(validators=[MinValueValidator(9)], max_digits=6, decimal_places=2, verbose_name='Wage') 
    tools = models.TextField(blank=True, default='', verbose_name='Tools') 
    is_hired = models.BooleanField(default=False, verbose_name='Job Is Hired') 
    is_completed = models.BooleanField(default=False, verbose_name='Job Is Completed') 
    employer_is_reviewed = models.BooleanField(default=False, verbose_name='Employer Is Reviewed') 
    worker = models.ForeignKey(WorkerProfile, null=True, verbose_name='Worker') 

    def __str__ (self): 
     return self.title 

Я также включил модель адреса, потому что оба пострадавших модели имеют ForeignKey к адресу.

+2

Django 1.8 не похож на скриншот, который вы опубликовали. Похоже, вы используете какой-то админ-код, о котором вы не упомянули. – Alasdair

+0

Я использую приложение django_admin_bootstrapped. Я не думал, что это повлияет, потому что это приложение стиля. Спасибо что подметил это. – Kevin

+1

Попробуйте зарегистрировать модель без администратора модели, например. 'admin.site.register (User)', чтобы узнать, является ли проблема администратором модели. Если это все еще не работает, вы должны показать модели, которые не работают. – Alasdair

ответ

1

Я установил Debug в True, и был UnicodeError. Проблема заключалась в том, что некоторые иностранные пользователи зарегистрировались и использовали неанглийские символы в своих адресах. Когда модель пользователя обратилась к этим адресам, администратор бросил UnicodeError. Решение состоит в том, чтобы удалить любые строки из любой таблицы, в которую были введены пользователем чужие символы, и подтвердить, что в будущем пользователи будут вводить допустимые символы в формы.

Смежные вопросы