Django管理员即使不丢失也会抱怨丢失的字段

时间:2011-08-03 22:40:30

标签: django django-admin

  • Python 2.7
  • Django 1.3

当我在admin.py中包含'user_id','user'时,那么......

  • 单击添加时间片时,表单中没有显示用户字段。
  • 如果我仍然提交,那么它会在用户字段中显示“此字段是必需的。”错误消息。
  • 如果我选择一个用户&amp;再次提交,然后我得到“”TimeslipAdmin.fields'指的是表单中缺少的字段'user_id'。“即使'user_id'是清楚地列在我的admin.py < / em>(见下文)

Traceback说 -

  • 异常类型:在/ admin / timeslip / timeslip / add /
  • 中配置不正确
  • 异常值:'TimeslipAdmin.fields'指的是表单中缺少的字段'user_id'。

但是......如果我将'user_id','user'从admin.py中删除,那么......

  • 单击添加时间片时,不会显示任何用户字段。
  • 无论如何提交它,它显示用户字段&amp; “使用此用户的时间段已存在。”错误消息。 (也不应该是错误'因为我希望用户拥有多个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 个答案:

答案 0 :(得分:2)

user_iduser是多余的。 Django自动命名数据库中的user字段user_id(因为它保存了它指向的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

答案 1 :(得分:0)

  

但是......如果我将'user_id','user'从admin.py中删除,那么......

您还没有'user_id'字段。所以只删除这个字段,我认为一切都会正常工作。