»Должно иметь значение для поля« id », прежде чем можно будет использовать это отношение« многие ко многим » - PullRequest
0 голосов
/ 22 июня 2019

Я пытаюсь сохранить данные в модели, которая имеет отношение m2m от администратора django, но когда я сохраняю эту ошибку, попробуйте изменить отношение к foreignkey, но это не то, что мне нужно, какие-либо идеи?

models.py

class Post(models.Model):
    titulo = models.CharField(verbose_name="titulo del post", max_length=50)
    posting = HTMLField(verbose_name="posting",blank=True,null=True)
    categoria = models.ManyToManyField("posts.Categoria", verbose_name="categorias del post")
    slug = models.SlugField(verbose_name="slug del post", help_text="identificador unico del post", unique=True)

admin.py


@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    readonly_fields = ('slug',)

    def save_model(self,request,obj,form,change):
        if change:
            formato = "%d%S"
            es = " "
            if obj.titulo.find(es) >= 1:
                obj.slug = obj.titulo.replace(es, "-").lower() + "-" + obj.fecha_creacion.strftime(formato)
            else:
                obj.slug = obj.titulo.lower() + "-" + obj.fecha_creacion.strftime(formato)
            obj.save()

1 Ответ

1 голос
/ 22 июня 2019

Эта ошибка говорит вам о том, что ваше сообщение фактически не существует в базе данных для создания отношения «многие ко многим».

Вы сказали, что пытались сохранить его вадмин?Я могу предположить, что вы присваивали ей категорию, а затем пытались ее сохранить.

Способ исправить это - сначала сохранить родительскую модель, а затем добавить категории.

Например:

post = Post.objects.create(titulo="Test") # Create post first
post.categoria = Categoria.objects.last() # and then assign m2m relationship
post.save() # save post.

Еще одним способом, которым вы можетесделать это в админке, чтобы установить

    categoria = models.ManyToManyField("posts.Categoria", verbose_name="categorias del post")

на это:

categoria = models.ManyToManyField("posts.Categoria", verbose_name="categorias del post", blank=True)

Запустите миграцию, откройте страницу администратора и создайте новое сообщение, не назначая категорию, и нажмите «Сохранить».

После создания сообщения вы можете назначить категорию и снова нажать «Сохранить».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...