Администратор Django жалуется на пропавшее поле, даже когда оно не пропало - PullRequest
2 голосов
/ 04 августа 2011
  • Python 2.7
  • Django 1.3

Когда я включаю 'user_id','user' в admin.py, тогда ...

  • пользовательское поле не отображается в форме, когда я щелкаю, чтобы добавить Timeslip.
  • Если я все равно отправляю его, то в пользовательском поле отображается ошибка ". Это поле обязательно для заполнения. "сообщение.
  • Если я выбираю пользователя и снова отправляю сообщение, я получаю «« TimeslipAdmin.fields »ссылается на поле« user_id », которое отсутствует в форме. », хотя «user_id»' четко указан в моем admin.py (см. ниже)

В трассировке указано -

  • Тип исключения: неправильно настроен в / admin /timeslip / timeslip / add /
  • Значение исключения: «TimeslipAdmin.fields» ссылается на поле «user_id», которое отсутствует в форме.

Но ... если я уйду 'user_id','user' из admin.py затем ....

  • ни одно пользовательское поле не появляется, когда я нажимаю, чтобы добавить Timeslip.
  • В любом случае отправьте его, и он покажет пользователяполе & а " Таймлип с этим пользователем уже существует."Сообщение об ошибке.(, что также не должно быть ошибкой, потому что я хочу, чтобы у пользователей было несколько таймлипов, что означает еще одну ошибку, которую мне придется выяснить, как только я смогу заставить эту форму работать )

admin.py

from timeslip.models import Timeslip
from django.contrib import admin

class TimeslipAdmin(admin.ModelAdmin):
    fields = ['user_id','user','day','hours_as_sec','part_of_day','drove','gas_money','notes']

admin.site.register(Timeslip, TimeslipAdmin)

models.py

from django.db import models
from django.contrib.auth.models import User

# Create your models here.

class Timeslip(models.Model):
   user=models.ForeignKey(User)
   day = models.DateField()
   hours_as_sec = models.PositiveIntegerField()
   part_of_day = models.CharField(max_length=16,choices=PART_O_DAY)
   drove = models.BooleanField(default=False)
   gas_money = models.DecimalField(max_digits=5,decimal_places=2)
   notes = models.TextField()

class UserProfile(models.Model):
   user = models.ForeignKey(User)
   url = models.URLField("Website", blank=True)
   position = models.CharField(max_length=50, blank=True)

User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0])

Я очень не понимаю, как это преодолеть.Я пришел из PHP, новичок в Python & Django.

Ответы [ 2 ]

2 голосов
/ 04 августа 2011

user_id и user являются избыточными. Django автоматически называет ваше user поле user_id в базе данных (поскольку оно содержит идентификатор для экземпляра пользователя, на который он указывает.)

Измените свой admin.py на следующий, и он должен работать:

class TimeslipAdmin(admin.ModelAdmin):
    fields = ['user','day','hours_as_sec','part_of_day','drove','gas_money','notes']

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

class TimeslipAdmin(admin.ModelAdmin):
    pass
0 голосов
/ 04 августа 2011

Но ... если я оставлю 'user_id', 'user' из admin.py, тогда ...

У вас нет поля 'user_id'. Поэтому удалите только это поле, и я думаю, что все будет работать нормально.

...