在Django中创建外键用户模型扩展需要

时间:2013-06-03 00:55:29

标签: python django django-models django-admin

我正在扩展Django User模型以包含指向另一个模型的外键(就像在Django docs中所说的那样):

models.py:

class Ward(models.Model):
    name = models.CharField(max_length=100)

    def __unicode__(self):
        return self.name

# Extending the user model
class WardMember(models.Model):
    user = models.OneToOneField(User)
    ward = models.ForeignKey(Ward)

    def __unicode__(self):
        return self.ward.name

admin.py:

class WardMemberInline(admin.StackedInline):
    model = WardMember
    can_delete = False
    verbose_name_plural = 'ward member'

# Define a new User admin
class UserAdmin(UserAdmin):
    inlines = (WardMemberInline, )

admin.site.register(Ward)

# Re-register UserAdmin to get WardMember customizations
admin.site.unregister(User)
admin.site.register(User, UserAdmin)

当我在管理界面中创建新用户时,我希望需要这个新的WardMember.ward扩展名。目前它没有强制执行。这是发生的事情:

  1. 创建用户无条件成功
  2. 用户成功时创建其他记录
  3. 除非选择了病房,否则现在编辑用户不会让我保存
  4. 我真的很喜欢上面的#1失败。

    我已经尝试找出如何使用代理对象覆盖save()的{​​{1}},但这不起作用。我调查了User信号,但文档明确表示这不是否决保存。

    什么是正确的方法?

    其他信息:

    • 我正在使用1.4。我在1.5中看到我可以extend the user class但我现在还不能更新到1.5。

    我最终用Django 1.5 开始了,但是我会留下这个,以防有人得到最终答案,贡献与1.4一起工作。

1 个答案:

答案 0 :(得分:0)

在django 1.3.1中我使用此代码并且工作正常:

from django.contrib.auth.models import User

class FilterSearchQueries(models.Model):
    title = models.CharField(max_length=250)
    owner = models.ForeignKey(User)
    place = models.CharField(max_length=250)
    query = models.TextField()