相关疑难解决方法(0)

Django Admin ManyToManyField

我做了一个模型(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

20
推荐指数
1
解决办法
3万
查看次数

Django 管理界面:将horizo​​ntal_filter 与ManyToMany 字段与中间表一起使用

我正在尝试增强 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)

python django many-to-many django-admin

5
推荐指数
1
解决办法
1358
查看次数

django admin - 在具有中间表的多对多字段上使用水平过滤器

是否可以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)

django django-admin

3
推荐指数
1
解决办法
7054
查看次数