Добрый день, ребята!
В проекте, среди прочего, есть модели:
class Category(models.Model):
name = models.CharField(max_length = 50, blank = False, null = False)
def __unicode__(self):
return "Category %s" % self.name
class Meta:
db_table = "categories"
managed = False
class Site(models.Model):
user = models.ForeignKey(User, blank = False, null = False, db_column = "user_id")
name = models.URLField(verify_exists = True, blank = False, null = False)
categories = models.ManyToManyField(Category, blank = True, through = "CategorySites", verbose_name = "Category")
def __unicode__(self):
return self.name
class Meta:
db_table = "sites"
managed = False
class CategorySites(models.Model):
site = models.ForeignKey(Site, blank = False, null = False, db_column = "site_id")
category = models.ForeignKey(Category, blank = False, null = False, db_column = "category_id")
def __unicode__(self):
return "Relation between site %s and category %s" % (self.site.name, self.category.name)
class Meta:
db_table = "categories_sites"
managed = False
Итак, как вы видите, существует отношение многие ко многим. как правило, это работает хорошо - я могу добавлять модели и управлять ими через оболочку manage.py или функции на стороне сервера.
Я хочу разрешить редактирование этого типа отношений на сайте администратора, поэтому я добавил модель администратора для сайтов:
class SiteAdmin(admin.ModelAdmin):
list_display = ('id', 'name')
list_filter = ('name', 'categories')
fieldsets = (
(None, {"fields": ("categories",)}),
)
def queryset(self, request):
qs = super(SiteAdmin, self).queryset(request)
if request.user.is_superuser:
return qs
else:
return qs.filter(user = request.user)
def has_change_permission(self, request, obj=None):
if not obj:
return True # So they can see the change list page
if request.user.is_superuser or obj.user == request.user:
return True
else:
return False
has_delete_permission = has_change_permission
но когда я захожу в admin-> sites-> Add site (или edit), django выдает исключение при рендеринге: объект NoneType не имеет атрибута label.
как можно это исправить?