我做了一个模型(models.py):
class opetest(models.Model):
name = models.CharField(max_length=200)
author = models.ForeignKey(User, related_name='author')
description = models.TextField(u'Test description', help_text = u'Some words about quiz')
pub_date = models.DateTimeField('date published', blank=False)
vacancies = models.ManyToManyField(Vacancy, blank=True)
students = models.ManyToManyField(User, blank=True, related_name='opetests') #This field I want to edit on "User change page"
estimate = models.IntegerField(default = 0, help_text = u'Estimate time in hours. \'0\' - unlimited')
Run Code Online (Sandbox Code Playgroud)
然后我尝试添加内联块以允许opetest在"更改用户"页面(admin.py)上进行分配:
class ProfileAdmin(UserAdmin):
filter_horizontal = ('opetests',)
admin.site.unregister(User)
admin.site.register(User, ProfileAdmin)
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
'ProfileAdmin.filter_horizontal' refers to field 'opetests' that is missing from model …Run Code Online (Sandbox Code Playgroud) django django-models django-orm django-admin manytomanyfield
我正在尝试增强 django 管理界面,类似于在此 SO 帖子的已接受答案中所做的工作。我有一张User桌子和一张Project桌子之间的多对多关系。在 Django 管理员中,我希望能够将用户分配到一个项目,如下图所示:

它在一个简单的情况下工作正常,ManyToManyField但问题是我的模型使用 的through参数ManyToManyField来使用中间表。我无法使用save_m2m()andset()函数,而且我对如何调整下面的代码以使其工作一无所知。
该模型:
class UserProfile(models.Model):
user = models.OneToOneField(User, unique=True)
projects = models.ManyToManyField(Project, through='Membership')
class Project(models.Model):
name = models.CharField(max_length=100, unique=True)
application_identifier = models.CharField(max_length=100)
type = models.IntegerField(choices=ProjectType)
...
class Membership(models.Model):
project = models.ForeignKey(Project,on_delete=models.CASCADE)
user = models.ForeignKey(UserProfile,on_delete=models.CASCADE)
# extra fields
rating = models.IntegerField(choices=ProjectType)
...
Run Code Online (Sandbox Code Playgroud)
用于小部件的代码admin.py:
from django.contrib.admin.widgets import FilteredSelectMultiple
class ProjectAdminForm(forms.ModelForm):
class Meta:
model = Project
fields = …Run Code Online (Sandbox Code Playgroud) 是否可以filter_horizontal用于ManyToManyField具有中间表的字段,例如没有中间表的字段?
例如:
class A(models.Model):
f1 = models.ManyToManyField(B)
f2 = models.ManyToManyField(C, through='T')
class B(models.Model):
pass
class C(models.Model):
pass
class T(models.Model):
a = models.ForeignKey(A)
c = models.ForeignKey(C)
class AAdmin(admin.ModelAdmin):
filter_horizontal = ('f1', 'f2', )
Run Code Online (Sandbox Code Playgroud)