Когда и как создается отношение "многие ко многим" при сохранении модели?

У меня есть набор объектов document и label, и я хочу, чтобы эти два объекта были связаны. Это типичное отношение "многие-ко-многим". У меня есть следующий код:

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))

Когда я загружаю документ, он добавляется в базу данных, но никаких меток не создается и не ассоциируется с документом. Нужно ли мне явно добавить что-то в функцию сохранения() документа, чтобы это произошло? Или где-то в файле Views.py? Я предполагаю, что это должно быть что-то вроде:

  • Проверить, существует ли уже добавляемая метка
  • Если нет, то создать новую
  • Взять идентификатор текущего документа и идентификатор новой/существующей метки
  • Добавить запись в таблицу document_labels (автоматически созданную для отношений "многие-ко-многим")

Мне кажется, что это довольно стандартная функциональность, которая, как я предполагал, будет встроена в отношения "многие-ко-многим" в django, но, похоже, пока что она у меня не работает. Я пытаюсь избежать повторного изобретения колеса. Я новичок в django.

Заранее спасибо!

5
задан Hartley Brody 4 November 2011 в 01:25
поделиться