Django:保存到ModelForm的Save()方法中的manytomany字段?

2024-03-29 12:30:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Django编写一个weblog应用程序。我目前有2个模型邮递和邮递时间。Post是一个标准的Post样式模型,包含诸如author、title、content等字段。它还包含一个名为Post_meta的多对多字段,它与我的第二个模型PostMeta相关联。PostMeta是一个简单的名称/值模型,包含两个字段:meta_key和meta_value。在

我想做的是在管理界面中定制Post模型的表单,使其更直观。具体地说,我想抽象出postpeta关联的创建,而不是看到不直观的选择框,它在默认情况下为管理员重新设置。我想显示一个文本字段来代替这个选择框,用户可以在这里输入一个逗号分隔的与文章相关的标记列表。当表单被提交时,我想将标签字段的输入拆分成单独的标记,并将每个标记保存为PostMeta,其中meta_key将设置为“tag”,meta_value将是逗号分隔的字符串之一。在

我的问题是我似乎不能正确地保存它。我不确定我的语法是否有问题(我对python比较陌生),或者是否还有其他需要做的事情我可能错过了。这是我的管理员py公司名称:

class PostAdminForm(forms.ModelForm):
    tags = forms.CharField(max_length=200)
    class Meta:
        model = Post
    def save(self, commit=True):
        model = super(PostAdminForm, self).save(commit=False)
        if commit:
            model.save()
            splitTags = self.cleaned_data['tags'].split(',')
            for tag in splitTags:
                pm = PostMeta(meta_key="TAG", meta_value=tag)
                pm.save()
                model.post_meta.add(pm)
        return model

class PostAdmin(admin.ModelAdmin):
    model = Post
    form = PostAdminForm

admin.site.register(Post, PostAdmin)

任何建议或建议,如何使这项工作将是伟大的。仍在学习:\


Tags: key标记模型selfmodelvaluesavetag
1条回答
网友
1楼 · 发布于 2024-03-29 12:30:02

代码中最直接的问题是当Django管理员调用save()方法时,commit参数几乎总是False。但是,如果您简单地忽略commit的值,您将无法对新创建的帖子执行model.post_meta.add(pm),因为该模型尚未在数据库中创建(因此无法在Postto PostMetam2m表中引用)。在

请参见my answer to a different post,我认为它也适用于您的情况,并且有很多代码您可能会觉得有用。在

相关问题 更多 >