作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下模型:
class Hospital(models.Model):
name = models.CharField(max_length=200)
authorized_users = models.ManyToManyField(User)
class HospitalAdmin(admin.ModelAdmin):
filter_horizontal = ('authorized_users', )
admin.site.register(models.Hospital, HospitalAdmin)
ManyToManyField(Hospital, through=Hospital.authorized_users.through)
至
UserProfile
,从而允许我将 filter_horizontal 小部件添加到两端。但是,这并不理想,因为稍后引用连接会很痛苦。想象一下,我想为给定的医院获得授权的第一个用户。而不是
hosp_name.authorized_users.all()[0]
,我必须做类似
hosp_name.authorized_users.all()[0].user
的事情.我什至不确定我将如何完成相当于
hosp_name.authorized_users.all()
的工作。获取完整列表(因为这将返回
UserProfiles
的列表,而不是
User
s。
最佳答案
更 Eloquent 地说,我的目标是使多对多医院-用户关系的管理双向进行。也就是说,在 Hospitals 的管理页面上,您会为用户获得一个 filter_horizontal,而在用户管理页面上,您将获得一个与 Hospitals 相关的 filter_horizontal。
我放弃了与 User 建立关系的想法,而是与 UserProfile 建立关系。我最终使用了 this 7 year old standing Django ticket 底部提到的确切代码.
最后,我的代码是
#models.py
class ReverseManyToManyField(models.ManyToManyField):
pass
try:
import south
except ImportError:
pass
else:
from south.modelsinspector import add_ignored_fields
add_ignored_fields([".*\.ReverseManyToManyField$",])
class Hospital(models.Model):
name = models.CharField(max_length=200)
authorized_users = models.ManyToManyField('UserProfile', blank=True)
def __unicode__(self):
return self.name
class UserProfile(models.Model):
user = models.OneToOneField(User)
authorized_hospitals = ReverseManyToManyField(Hospital, through=Hospital.authorized_rads.through)
def __unicode__(self):
return self.user.username
#admin.py
##### Stuff to register UserProfile fields in the admin site
class UserProfileInline(admin.StackedInline):
model=models.UserProfile
can_delete = False
verbose_name_plural = 'profiles'
filter_horizontal = ('authorized_hospitals',)
class UserAdmin(UserAdmin):
inlines = (UserProfileInline, )
class HospitalAdmin(admin.ModelAdmin):
filter_horizontal = ('authorized_users', )
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
##### END UserProfile Stuff
admin.site.register(models.Hospital, HospitalAdmin)
关于Django:在 'User Change' 管理页面上显示 filter_horizontal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14828168/
我是一名优秀的程序员,十分优秀!