Я хочу сделать приложение для курса для моего колледжа. Вот мой model.pyКак настроить параметр list_display в django с помощью набора запросов?
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Instructor(models.Model):
name = models.CharField(max_length=200)
owner = models.ForeignKey(User)
# other stuff here
def __str__(self):
return self.name
class Course(models.Model):
course_code = models.CharField(max_length=10, default='CS')
instructor = models.ForeignKey(Instructor)
course_name = models.CharField(max_length=200)
# other stuff here
def __str__(self):
return self.course_name
class CourseOutline(models.Model):
course = models.OneToOneField(Course)
objectives = models.TextField(blank=True)
# other stuff
И это это мой admin.py
from django.contrib import admin
from models import Course, CourseOutline, Instructor
# Register your models here.
admin.site.register(Instructor)
class CourseAdmin(admin.ModelAdmin):
# some other stuff
def queryset(self, request):
qs = super(CourseAdmin, self).queryset(request)
if request.user.is_superuser:
return qs
# get instructor's "owner"
return qs.filter(instructor__owner=request.user)
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "instructor" and not request.user.is_superuser:
kwargs["queryset"] = Instructor.objects.filter(owner=request.user)
return db_field.formfield(**kwargs)
return super(CourseAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
list_display = ('course_name', 'instructor')
list_filter = ('queryset',)
admin.site.register(Course, CourseAdmin)
class CourseOutlineAdmin(admin.ModelAdmin):
# nothing here of importance
# whatever was here
def queryset(self, request):
qs = super(CourseOutlineAdmin, self).queryset(request)
if request.user.is_superuser:
return qs
# get instructor's "owner"
return qs.filter(course__instructor__owner=request.user)
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "course" and not request.user.is_superuser:
kwargs["queryset"] = Course.objects.filter(instructor__owner=request.user)
return db_field.formfield(**kwargs)
return super(CourseAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
admin.site.register(CourseOutline, CourseOutlineAdmin)
Здесь я использую разрешение на уровне строк для преподавателей, так что они могут добавлять только курсы, связанные с ними и добавить курс наброски на те курсы, к которым они относятся. Вот почему я использовал инструктора в качестве внешнего ключа для курсов и написал функцию, чтобы манипулировать раскрывающимся меню внешнего ключа, чтобы в раскрывающемся меню появилось только их имя. Но когда они видят курсы, они могут наблюдать за другими курсами инструктора, и если у них есть привилегии для удаления курсов, они могут также удалить курсы других инструкторов. Поэтому я хочу, чтобы они могли видеть только те курсы в списке, который у них есть. В одном сообщении я видел функцию запроса и пытался ее реализовать, но она не решила мою проблему.
Но это возвращает ошибку атрибута. Запрос Метод: \t GET Request URL: \t http://127.0.0.1:8000/admin/mis/course/ Джанго Версия: 1.8.3 \t Тип исключения: \t AttributeError Exception Значение: объект \t 'супер' не имеет атрибута 'queryset' Исключение Место: \t /home/sroy8091/college/mysite/mis/admin.py в get_queryset, строка 9 –