我有一組文檔對象和標籤對象,我希望鏈接這兩個對象。這是一種典型的多對多關係。我有以下代碼:何時以及如何在保存模型時創建多對多關係?
Models.py:
class Document(models.Model):
title = models.CharField(max_length=50, unique=True)
title_slug = models.SlugField(max_length=50, unique=True, editable=False)
labels = models.ManyToManyField('Label')
def save(self, *args, **kwargs):
self.title_slug = slugify(self.title)
super(Document, self).save(*args, **kwargs)
class Label(models.Model):
name = models.CharField(max_length=40, unique=True)
slug = models.SlugField(max_length=40, unique=True, editable=False)
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super(Document, self).save(*args, **kwargs)
Views.py:
class DocumentForm(ModelForm):
class Meta:
model = Document
fields = ["title","labels"]
def upload_document(request):
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
new_document = form.save()
return HttpResponseRedirect("/thanks/")
else:
form = DocumentForm()
return render_to_response('upload_page.html', {'form':form}, context_instance=RequestContext(request))
當我上傳的文件,它就會被添加到數據庫中,但是沒有標籤正在創建或與文檔關聯。我是否需要向文檔的save()函數中明確添加某些內容以實現此目的?或者在Views.py文件的某個地方?我想像它會去是這樣的:
- 檢查,看看如果這是要添加的標籤已經存在
- 如果沒有,然後創建一個新的標籤
- 既抓住當前DOCUMENT_ID和新的/現有label_id
- 添加記錄到document_labels表(適用於許多一對多關係自動生成)
我覺得這是我認爲將內置於敢標準功能Django中的任何多對多的關係,但它似乎並沒有爲我工作到目前爲止。我試圖避免在這裏重新發明輪子。 django有點新鮮。
在此先感謝!
您使用的形式?您是否通過其他方式添加「文檔」?你在說什麼save()方法?在'文檔','標籤'或表單?請提供一些保存對象的示例視圖/表單/其他代碼。 – andreaspelme
我想我不確定應該使用哪種保存方法。因此,我的問題=]文檔全部通過網站上的表單添加。我已經更新了這個問題,以包含來自views.py –