Save M2M "Via" Inlines in Django Admin

Apparently, Django ModelAdmin / ModelForm does not allow save_m2m () if there is a staging table for ManyToManyField.

models.py:

from django.db import models


def make_uuid():
    import uuid
    return uuid.uuid4().hex


class MyModel(models.Model):
    id = models.CharField(default=make_uuid, max_length=32, primary_key=True)
    title = models.CharField(max_length=32)
    many = models.ManyToManyField("RelatedModel", through="RelatedToMyModel")

    def save(self, *args, **kwargs):
      if not self.id:
        self.id = make_uuid()
      super(GuidPk, self).save(*args, **kwargs)


class RelatedModel(models.Model):
    field = models.CharField(max_length=32)


class RelatedToMyModel(models.Model):
    my_model = models.ForeignKey(MyModel)
    related_model = models.ForeignKey(RelatedModel)
    additional_field = models.CharField(max_length=32)

admin.py:

from django import forms
from django.contrib import admin

from .models import MyModel


class RelatedToMyModelInline(admin.TabularInline):
    model = MyModel.many.through


class MyModelAdminForm(forms.ModelForm):
    class Meta:
        model = MyModel


class MyModelAdmin(admin.ModelAdmin):
    form = MyModelAdminForm
    inlines = (RelatedToMyModelInline, )


admin.site.register(MyModel, MyModelAdmin)

If I save MyModel first and then add a new inline string linked through the model, it will work fine, but if I try to set the inline line and also add data for the new MyModel, I get a Django admin error "Please correct the error below." nothing is highlighted below.

MyModel, - ? , Django MyModel - . save(), save_m2m() instance.save(), , -, M2M .

Django 1.2, 1.3.

: , , , , , , , M2M MyModel... Django MyModel.id python manage.py syncdb - GUID .

Django.

+3
1

MyModelAdmin save_formset. , .

0

All Articles