私は大学のためのコースガイダンスアプリを作りたいと思っています。ここに私のmodel.pyクエリーセットを使用してdjangoのlist_displayオプションをカスタマイズする方法は?
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
されており、この本、彼らは唯一のそれらに関連するコースを追加して、コースを追加できるようにここで
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)
私はインストラクターのための行レベルのアクセス許可を使用しています私のadmin.py彼らが関連しているコースにのみ概要を示します。だから私はコースのための外国のキーとしてインストラクターを使用し、ドロップダウンメニューに名前だけが来るように外部キーのドロップダウンメニューを操作する関数を書いたのです。しかし、彼らはコースを見ているときに、彼らは他のインストラクターのコースを見ることができ、彼らはコースを削除する権限を持っている場合、他のインストラクターのコースを削除することができます。だから私は彼らが所有しているリストにあるコースだけを見ることができるようにしたい。 1つの投稿では、私はqueryset関数を見て、それを実装しようとしましたが、それは私の問題を解決していません。
ただし、属性のエラーが返されています。リクエストメソッド:\t リクエストURLをGET:\t http://127.0.0.1:8000/admin/mis/course/ Djangoのバージョン:1.8.3 \t 例外タイプ:\tはAttributeError 例外値:\t 'スーパー' オブジェクト'queryset'属性がありません 例外の場所:\t /home/sroy8091/college/mysite/mis/admin.py in get_queryset、9行目 –