Django / Модель с ManytoManyField по умолчанию дает en entry
Models.py
class Scenes(models.Model):
name = models.SlugField('Scene name', max_length=60,unique=True)
description = models.TextField(blank=True)
fileGltf = models.FileField(null=TRUE, blank=False, upload_to="3dfiles/")
record_date = models.DateTimeField('Scene date')
manager = models.ForeignKey(
settings.AUTH_USER_MODEL,
blank=True,
null=True,
on_delete=models.SET_NULL)
prev = models.ForeignKey(
'self',
related_name='previous',
blank=True,
null=True,
on_delete=models.SET_NULL)
next = models.ManyToManyField(
'self',
blank=True, )
Views.py (извлечение)
if form.is_valid():
nextSceneSlug=form.cleaned_data.get('name')
scenes=form.save(commit=False)
scenes.manager = request.user
scenes.record_date = now
scenes.prev = ScenePrevious
form.save()
Когда я записываю новую запись с помощью models.py, есть значение по умолчанию для этого следующего поля. (World - это сцена origine) Но когда я добавляю его с помощью панели администратора, его нет. Как я могу сделать это в моем views.py, чтобы он оставил пустое поле?
Не имеет смысла указывать prev и next, если это означает, что если A является prev из B, то B является членом next из A. Вы можете определить простой ForeignKey:
class Scene(models.Model):
name = models.SlugField('Scene name', max_length=60, unique=True)
description = models.TextField(blank=True)
file_gltf = models.FileField(null=TRUE, upload_to='3dfiles/')
record_date = models.DateTimeField('Scene date')
manager = models.ForeignKey(
settings.AUTH_USER_MODEL,
blank=True,
null=True,
on_delete=models.SET_NULL
)
previous = models.ForeignKey(
'self',
related_name='next',
blank=True,
null=True,
on_delete=models.SET_NULL
)
Если у вас есть, например, сцены B и C, которые обе имеют A в качестве previous, то A.next.all() вернет QuerySet, которая содержит B и C.
Примечание: обычно модели Django присваивается сингулярное имя, поэтому
Sceneвместо.Scenes
