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, чтобы он оставил пустое поле?

enter image description here

Не имеет смысла указывать 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.

Вернуться на верх