相关疑难解决方法(0)

Django管理界面:使用horizo​​ntal_filter和内联ManyToMany字段

我有一个Django模型字段,我想内联.该领域是一种多对多的关系.所以有"项目"和"用户档案".每个用户配置文件可以选择任意数量的项目.

目前,我有"表格式"内联视图工作.有没有办法有一个"水平过滤器",以便我可以轻松地添加和删除用户配置文件中的项目?

请参阅附图以获取示例.在此输入图像描述

这是用户配置文件的型号代码:

class UserProfile(models.Model):
    user = models.OneToOneField(User, unique=True)
    projects = models.ManyToManyField(Project, blank=True, help_text="Select the projects that this user is currently working on.")
Run Code Online (Sandbox Code Playgroud)

和项目的模型代码:

class Project(models.Model):
    name = models.CharField(max_length=100, unique=True)
    application_identifier = models.CharField(max_length=100)
    type = models.IntegerField(choices=ProjectType)
    account = models.ForeignKey(Account)
    principle_investigator = models.ForeignKey(User)
    active = models.BooleanField()
Run Code Online (Sandbox Code Playgroud)

以及视图的管理代码:

class UserProfileInline(admin.TabularInline):
    model = UserProfile.projects.through
    extra = 0
    verbose_name = 'user'
    verbose_name_plural = 'users'

class ProjectAdmin(admin.ModelAdmin):
    list_display = ('name', 'application_identifier', 'type', 'account', 'active')
    search_fields = ('name', 'application_identifier', 'account__name')
    list_filter = ('type', 'active')
    inlines …
Run Code Online (Sandbox Code Playgroud)

python django django-admin

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

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 ×2

django-admin ×2

python ×2

many-to-many ×1