I miei modelli:accesso molti a molti "attraverso" campi di relazione in formsets
class End_User(models.Model):
location = models.ForeignKey(Location)
first_name = models.CharField(max_length=70, blank=True, null=True)
email_address = models.CharField(max_length=70, blank=True, null=True)
class Phone_Client(models.Model):
end_user = models.ManyToManyField(End_User)
...
extensions = models.CharField(max_length=20)
class Line(models.Model):
phone_client = models.ManyToManyField(Phone_Client, through='Phone_Line')
....
voicemail = models.BooleanField(default=False)
class Phone_Line(models.Model):
phone_client = models.ForeignKey(Phone_Client)
line = models.ForeignKey(Line)
line_index = models.IntegerField()
Quindi, in pratica un utilizzatore finale può avere molti telefoni, un telefono cellulare può avere molte linee, connessi attraverso Phone_line.
La mia pagina deve avere tutti questi oggetti modificabili e nuove istanze create runtime per Phone_Clients e Line tutti nella stessa pagina. Attualmente sto creando un semplice modulo modello End_User e oggetti modelformset_factory per Phone_Client e Lines. Poiché un telefono può avere più linee, ogni modulo telefonico in phone_formset può avere un oggetto formset di riga. Attualmente sto facendo qualcosa di simile
end_user = End_User.objects.get(pk=user_id)
user_form = End_UserForm(instance=end_user)
Phone_ClientFormSet = modelformset_factory(Phone_Client,form=PartialPhone_ClientForm, extra=0, can_delete=True)
phone_clients_formset = Phone_ClientFormSet(queryset=end_user.phone_client_set.all(), prefix='phone_client')
all_lines = modelformset_factory(Line, form=PartialLineForm, extra=0, can_delete=True)
phone_clients = end_user.phone_client_set.all()
client_lines_formsets = {}
for phone in phone_clients:
client_lines_formsets[phone.id] = all_lines(queryset=phone.line_set.all(), prefix='phone_client_'+str(phone.id))
Sto usando questo elenco per visualizzare le linee appartenenti ad un phone_client nel modello utilizzando formsets.
Ho la seguente domanda, sui modelli
Posso usare fabbrica inline_formset per gestire molti a molti relazione contenente un bel passaggio di classe? In tal caso, come faccio a farlo per Phone_Client, Line e Phone_Line attraverso la relazione?
Devo visualizzare l'indice di riga per un determinato telefono, combinazione di linee, come faccio a farlo nel modello? Ho visto
How do I access the properties of a many-to-many "through" table from a django template? Non voglio solo visualizzare, ma associare il valore al telefono, combinazione di linee, se possibile, nel formset di linea o telefono, in modo tale che se l'utente cambia l'indice, posso salvarlo nei dati base durante la pubblicazione dei dati del formset.
Sono nuovo del django quindi ogni aiuto è molto apprezzato. Grazie !!
Grazie per la risposta. Lo proverò !! – akotian
Ho provato questo e funziona per me. Comunque una domanda, dovrei gestire separatamente il formset Line e il formset inline sopra a destra ?? – akotian
Intendo che una pagina può avere più telefoni, che possono avere più linee, quindi gestisco questa logica nel modello. Allo stesso modo dovrei usare i template per mostrare line_index accanto alle linee? – akotian