Прежде всего, это мой файл настроек:
Код: Выделить всё
#...
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)
Все хорошо, объекты создаются, но когда я пытаюсь добавить тест...

Я получаю эту ошибку:

(С выбором какой-либо версии или типов или без них).
Чтобы быть уверенным, что я подтвердил свою учетную запись администратора:


Почему у меня возникает эта ошибка? Конечно, у меня должны быть все права. Для создания теста я не делал ничего особенного, чем для других моделей. Конечно, я использовал встроенные строки с полем ManyToMany, но я уже делал это в другом проекте, и все работало нормально. Что я здесь делаю не так?
Подробнее здесь: https://stackoverflow.com/questions/787 ... ting-a-new