<Post:mi post>”必须具有字段“ id”的值,然后才能使用多对多关系

时间:2019-06-22 14:01:14

标签: python django

我正在尝试将数据保存在具有django admin的m2m关系的模型中,但是当我保存该错误时,尝试将关系更改为外键,但这不是我所需要的,有什么主意吗?

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 个答案:

答案 0 :(得分:1)

此错误告诉您的是,您的帖子实际上在数据库中不存在,无法创建多对多关系。

您说过要尝试将其保存在管理员中?我可以假设您正在为其分配一个类别,然后尝试保存它。

解决此问题的方法是先保存父模型,然后添加类别。

例如:

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)

运行您的迁移,打开管理页面并创建新帖子,而不分配类别,然后单击保存。

创建帖子后,您现在可以分配一个类别,然后再次单击“保存”。