Supponiamo che io sono nel solito situazione in cui ci sei campi aggiuntivi nel rapporto many2many:Lavorare con campi aggiuntivi in una forma in linea - save_model, save_formset, non si può dare un senso della differenza
class Person(models.Model):
name = models.CharField(max_length=128)
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership')
class Membership(models.Model):
person = models.ForeignKey(Person)
group = models.ForeignKey(Group)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)
# other models which are unrelated to the ones above..
class Trip(models.Model):
placeVisited = models.ForeignKey(Place)
visitor = models.ForeignKey(Person)
pleasuretrip = models.Boolean()
class Place(models.Model):
name = models.CharField(max_length=128)
I desidera aggiungere alcuni campi aggiuntivi nel modulo Membership che viene visualizzato tramite Inline. Questi campi sono fondamentalmente una scorciatoia per l'istanziazione di un altro modello (Trip). Trip può avere le sue viste amministratore, ma queste scorciatoie sono necessarie perché quando i miei partner di progetto inseriscono i dati di 'Membership' nel sistema, hanno anche le informazioni 'Trip' a portata di mano (e anche perché alcune delle informazioni in Membership possono solo essere copiati su Trip ecc. ecc.).
Quindi tutto quello che voglio avere è di due campi aggiuntivi nella composizione Inline - placeVisited e pleasuretrip - che insieme con l'istanza persona mi permette di istanziare il modello di viaggio in background ...
ho trovato fuori posso facilmente aggiungere campi extra alla vista in linea definendo il mio modulo. Ma una volta inseriti i dati, come e quando fare riferimento ad essi per eseguire le operazioni di salvataggio che devo fare?
class MyForm(forms.ModelForm):
place = forms.ModelChoiceField(required=False, queryset=Place.objects.all(), label="place",)
pleasuretrip = forms.BooleanField(required=False, label="...")
class MembershipInline(admin.TabularInline):
model = Membership
form = MyForm
def save_model(self, request, obj, form, change):
place = form.place
pleasuretrip = form.pleasuretrip
person = form.person
....
# now I can create Trip instances with those data
....
obj.save()
class GroupAdmin(admin.ModelAdmin):
model = Group
....
inlines = (MembershipInline,)
Questo non sembra funzionare ... Sono anche un po 'perplesso dal save_formset metodo ... forse è che quello che dovrei usare? Molti grazie in anticipo per l'aiuto !!!!