gpt4 book ai didi

python - 管理员内联 ManyToMany autocomplete_fields

转载 作者:行者123 更新时间:2023-12-05 01:32:05 25 4
gpt4 key购买 nike

我想使用 vk_chat 关系添加对 AcademicGroupInline 的搜索

# models.py

class AcademicGroup(models.Model):
students = models.ManyToManyField(
'user.Student',
)
vk_chat = models.OneToOneField(
'Chat',
)


class Chat(models.Model):
owner_id = models.BigIntegerField()
name = models.CharField()


# admin.py

class AcademicGroupInline(admin.TabularInline):
model = AcademicGroup.students.through
autocomplete_fields = (
'vk_chat',
)


@admin.register(Student)
class StudentAdmin(admin.ModelAdmin):
inlines = [AcademicGroupInline]

但是我得到了一个错误的结果:

<class 'user.admin.AcademicGroupInline'>: (admin.E037) The value of 'autocomplete_fields[0]' refers to 'vk_chat', which is not an attribute of 'course.AcademicGroup_students'.

最佳答案

首先,您应该像注册 Student 一样注册 AcademicGroup 模型,并添加 search_fields 属性,该属性的值应该是 vk_chat

@admin.register(AcademicGroup )
class AcademicGroupAdmin(admin.ModelAdmin):
....
search_fields = ['vk_chat']

其次,在您的 AcademicGroup 模型中,您应该在 M2M 字段中添加此参数 related_name='academicgroups'(您可以根据需要命名)。

第三,在你的 AcademicGroupInline 类中,你应该把 Student.AcademicGroup.through 放在模型字段而不是 AcademicGroup.students.through 因为我猜你想列出 Acadamicgroups与学生相关而不是相反。

最后,在您的 autocomplete_fields 中,您只能放置由 AcademicGroup.students.through 创建的模型的属性,所以我建议您使用 打印这些属性print(model._meta.fields) 在你的 AcademicGroupInline 类中(我想你会得到 idstudent学术组)。因此,您的 autocomplete_fields 应该将 academicgroup 作为值。

class AcademicGroupInline(admin.TabularInline):
model = Student.academicgroups.through
autocomplete_fields = (
'academicgroup',
)

关于python - 管理员内联 ManyToMany autocomplete_fields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65758636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com