one-to-many inline select with django admin

前端 未结 5 1654
名媛妹妹
名媛妹妹 2020-12-01 04:16

I have a standard many-to-one relationship set up. There are a bunch of fields, but for our purposes here, the relevant model is:

class Class(models.Model):
         


        
5条回答
  •  一生所求
    2020-12-01 04:50

    Probably, this will help: I used the described approach, but changed methods save and save_m2m in the following way:

    from django import forms
    from django.db import models
    from django.contrib import admin
    
    class Foo(models.Model):
         pass
    
    class Bar(models.Model):
         foo = models.ForeignKey(Foo)
    
    class FooForm(forms.ModelForm):
        class Meta:
            model = Foo
    
        bars = forms.ModelMultipleChoiceField(queryset=Bar.objects.all())
    
        def __init__(self, *args, **kwargs):
            super(FooForm, self).__init__(*args, **kwargs)
            if self.instance:
                self.fields['bars'].initial = self.instance.bar_set.all()
    
        def save_m2m(self):
            pass
    
        def save(self, *args, **kwargs):
            self.fields['bars'].initial.update(foo=None)
            foo_instance = Foo()
            foo_instance.pk = self.instance.pk
            # Copy all other fields.
            # ... #
            foo_instance.save()
            self.cleaned_data['bars'].update(foo=instance)
            return instance
    
    class FooAdmin(admin.ModelAdmin):
        form = FooForm
    

提交回复
热议问题