Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据管理中的其他字段填充Django ManyToManyField选项_Python_Django_Django Models_Django Forms_Django Admin - Fatal编程技术网

Python 根据管理中的其他字段填充Django ManyToManyField选项

Python 根据管理中的其他字段填充Django ManyToManyField选项,python,django,django-models,django-forms,django-admin,Python,Django,Django Models,Django Forms,Django Admin,我在Django Admin Add(Django管理员添加)屏幕上根据同一表单上另一个字段的输入筛选ManyToManyField的选项时遇到问题。我是Django新手,无法使用其他地方描述的任何通用修复程序,因为它们都与我的情况略有不同。以下是我的情况: 我的项目中有三个模型:类,学生,和AttendenceCord。在Django Admin中,当添加考勤记录时,我想根据为字段关联的\u类所做的选择,更改字段缺席\u学生的选项。因此,例如,如果选择了Associated_Class“CS

我在Django Admin Add(Django管理员添加)屏幕上根据同一表单上另一个字段的输入筛选ManyToManyField的选项时遇到问题。我是Django新手,无法使用其他地方描述的任何通用修复程序,因为它们都与我的情况略有不同。以下是我的情况:

我的项目中有三个模型:
学生
,和
AttendenceCord
。在Django Admin中,当添加考勤记录时,我想根据为字段
关联的\u类
所做的选择,更改字段
缺席\u学生
的选项。因此,例如,如果选择了
Associated_Class
“CS 450”,则
缺席学生的选项应仅更改为班级列表中包含CS 450的学生

以下是我的模型:

from __future__ import unicode_literals

from django.db import models
from django.contrib.auth.models import User
from django.utils.encoding import python_2_unicode_compatible
import random, string

# Create your models here.

#This is the model for a student
@python_2_unicode_compatible
class Student(models.Model):
    pass
    Student_First_Name = models.CharField(max_length=200)
    Student_Last_Name = models.CharField(max_length=200)
    Student_ID_Number = models.CharField(max_length=200)
    Student_Class = models.ForeignKey('Class', null=True)
    def __str__(self):
        return self.Student_Last_Name + ',' + self.Student_First_Name

# This is the model for a class
@python_2_unicode_compatible
class Class(models.Model):  

    class Meta:
        verbose_name_plural = "Classes"
    Class_Name = models.CharField(max_length=200)
    Student_List = models.ManyToManyField('Student', related_name='class_list')
    Professor = models.ForeignKey(User,null=True)
    AddCode = models.IntegerField
    pass
    def __str__(self):
        return self.Class_Name
    def getName(self):
        return self.Class_Name
    def getProfessor(self):
        return self.Professor.id
    def getProf(self):
        return self.Professor
    def getStudents(self):
        return self.Student_List

#This is the model for attendance records
class AttendanceRecord(models.Model):
    class Meta:
        verbose_name = "Attendance Record"
    Associated_Class = models.ForeignKey(Class, on_delete=models.CASCADE, related_name='Attendance_Records')
    Date = models.DateField()
    Absent_Students = models.ManyToManyField('Student', blank=True)
    Present_Students = models.ManyToManyField('Student', related_name='a')
    def get_associated_class_id(self):
        return self.Associated_Class
    def __str__(self):
        return self.Associated_Class.__str__() + ' on date ' + self.Date.__str__(self)
我尝试通过编辑
AttendanceCordAdminForm
类和
AttendanceCordAdmin
类来实现这一点。我的问题是,在设置
self.fields['缺席学生].queryset
时,我不知道如何访问表单上当前选择的
关联类。我一直收到一个错误,“AttendanceCord没有关联的_类”。以下是刚刚讨论的全部课程:

class AttendanceRecordAdminForm(forms.ModelForm):

  class Meta:
    model = AttendanceRecord
    fields = '__all__'

  def __init__(self, *args, **kwargs):
    super(AttendanceRecordAdminForm, self).__init__(*args, **kwargs)
    instance = kwargs.get('instance', None)
    self.fields['Absent_Students'].queryset = Student.objects.filter(class_list__id=self.instance.get_associated_class_id())
    self.fields['Present_Students'].queryset = Student.objects.filter(class_list__id=1)


class AttendanceRecordAdmin(admin.ModelAdmin):
  form = AttendanceRecordAdminForm
  filter_horizontal = ('Absent_Students', 'Present_Students',)

基本上,我正在寻找一种方法来访问管理表单上当前输入的关联类,以便能够正确地筛选查询集。

经过数小时的在线搜索,我终于找到了我需要的。smart_select应用程序中的大量链接使这一过程变得非常简单。此链接:描述安装过程,并链接到安装后使用它的文档。希望这也能帮助其他人