저는 장고에 웹 블로그 앱을 쓰고 있습니다. 저는 현재 Post와 PostMeta의 2 가지 모델을 가지고 있습니다. Post는 작성자, 제목, 내용 등과 같은 필드가있는 표준 포스트 스타일 모델입니다. 또한 두 번째 모델 PostMeta와 연관된 post_meta라는 하나의 다 대다 필드를 포함합니다. PostMeta는 meta_key 및 meta_value의 두 필드가있는 간단한 이름/값 모델입니다.Django : ModelForm의 save() 메소드에서 many-to-many 필드로 저장 하시겠습니까?
제가하려는 것은 관리 인터페이스에서 포스트 모델의 양식을보다 직관적으로 사용자 정의하는 것입니다. 특히 관리자를 위해 기본적으로 재 지정되는 직관적 인 선택 상자를 보는 대신 PostMeta 연결 만들기를 추상화하려고합니다. 사용자가 쉼표로 구분 된 게시물 태그 목록을 입력 할 수있는이 선택 상자 대신 텍스트 필드를 표시하고 싶습니다. 양식을 제출할 때 태그 필드의 입력을 개별 태그로 분할하고 각각을 PostMeta로 저장하려고합니다. 여기서 meta_key는 "TAG"로 설정되고 meta_value는 쉼표로 구분 된 문자열 중 하나가됩니다.
내가 가지고있는 문제는 올바르게 저장하지 못하는 것입니다. 필자는 구문에 문제가 있는지 잘 모르겠다. (필자는 파이썬에 처음으로 익숙하다.) 또는 놓친 것일 수도있는 다른 것들이 있는지 잘 모르겠다. 다음은 내 admin.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)
이 작업을 수행하는 방법에 대한 조언이나 제안 사항은 훌륭합니다. 아직 학습 중 : \