分析你的需求,你的相关表大概有这些:
下面是实现的几个主要点:
# models.py
class team(models.Model):
...
teacher = models.ForeignKey(User, verbose_name='老师', on_delete=models.CASCADE)
...
class student(models.Model):
...
team = models.ForeignKey(Team, verbose_name='学生', on_delete=models.CASCADE)
...
class SomeModel(models.Model):
...
student = models.ForeignKey(Team, verbose_name='学生', on_delete=models.CASCADE)
...
# admin.py
class SomeModelAdmin(admin.ModelAdmin):
list_display = (...)
fields = ('student', ...)
form = SomeModelForm
...
def get_form(self, request, obj=None, **kwargs):
"""user传值给form"""
form = super().get_form(request, obj, **kwargs)
form.user = request.user # 给form传值user
return form
# forms.py
class SomeModelForm(forms.ModelForm):
...
student = forms.ModelChoiceField(label='学生', queryset=None, empty_label=None)
...
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# 在init里重设字段属性,user为从ModelAdmin的get_form中传值过来的
self.fields['student'].queryset = Student.objects.filter(team__teacher=self.user)