Django возвращает "Вам не разрешено выполнять это действие." при создании новой записи
У меня есть приложение, в котором я хочу запускать скрипты. Эти скрипты хранятся в базе данных. Вот как я делаю все это, используя Django 5.0.1 :
Прежде всего, это мой файл настроек :
#...
INSTALLED_APPS = [
# Django apps
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# My apps
'personal',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
#...
Это мой файл урлов :
from django.contrib import admin
urlpatterns = [
path('admin/', admin.site.urls),
#...
]
Это мой файл с моделями :
from django.db import models
from django.core.exceptions import ValidationError
from django.conf import settings
from os.path import join
class Product(models.Model):
name = models.CharField(max_length=50, null=False, blank=False, unique=True)
def __str__(self):
return self.name
class Type(models.Model):
short_name = models.CharField(max_length=3, null=False, blank=False, unique=True)
complete_name = models.CharField(max_length=30, null=False, blank=False)
def __str__(self):
return self.complete_name
class Version(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE)
version = models.CharField(max_length=30, null=False, blank=False)
constraints = [
models.UniqueConstraint(fields=['product', 'version'], name='unique_product_version'),
]
def __str__(self):
return f"{self.product} {self.version}"
class TypeTestRelation(models.Model):
type = models.ForeignKey(Type, null=False, blank=False, related_name='attributed_tests', on_delete=models.CASCADE)
test = models.ForeignKey(Test, null=False, blank=False, on_delete=models.CASCADE)
class Meta:
unique_together = ['type', 'test']
class Test(models.Model):
name = models.CharField(max_length=50, null=False, blank=False, unique=True)
file = models.FileField(upload_to=join(join(settings.BASE_DIR, "static"), "scripts"), null=True, blank=False) # Add the file field
test_result = models.FileField(upload_to=join(join(settings.BASE_DIR, "static"), "test_results"), null=True, blank=True, editable=False)
versions = models.ManyToManyField(Version, through='TestVersionRelation')
types = models.ManyToManyField(Type, through='TypeTestRelation')
def __str__(self):
return self.name
Это файл администратора :
# ----------------- Test form -----------------
from typing import Any
from django import forms
from django.contrib import admin
from .models import Product, Type, Version, Test, TestVersionRelation, TypeTestRelation
class TypeTestRelationInline(admin.TabularInline):
model = TypeTestRelation
extra = 1
class TestVersionRelationInline(admin.TabularInline):
model = TestVersionRelation
extra = 1
class TestAdminForm(forms.ModelForm):
class Meta:
model = Test
fields = '__all__'
def clean(self):
cleaned_data = super().clean()
class TestAdmin(admin.ModelAdmin):
form = TestAdminForm
inlines = (TestVersionRelationInline, TypeTestRelationInline,)
list_display = ('name','file', 'test_result')
admin.site.register(Product)
admin.site.register(Type)
admin.site.register(Version)
admin.site.register(Test, TestAdmin)
Теперь проблема? Сначала ее не было. Я создал суперпользователя с помощью команды createsuperuser. Затем я вошел в систему и создал : 1 продукт, 2 версии (ранее созданного продукта) и 4 типа. Все хорошо, и объекты созданы, но когда я пытаюсь добавить тест...
Я получаю эту ошибку :
(С выбором или без выбора некоторых версий или типов).
Чтобы быть уверенным, я проверил свой аккаунт администратора :
Почему
у меня возникает эта ошибка? По идее, у меня должны быть все права. При создании Test я не делал ничего другого, чем при создании других моделей. Конечно, я использовал инлайны с полем manyToMany, но я уже делал это в другом проекте, и все работало нормально. Что я делаю не так?