Ich habe 2 Modelle in 1 Form. In dieser Form können Daten geändert werden. Für 1 Modell (Sloep_core) muss der Inhalt nur aktualisiert werden, das funktioniert. für das andere Modell (Sloep_gegevens) wird der Inhalt normalerweise aktualisiert. Nur wenn der Wert 'sloepnaam' in der Form für das Modell 'Sloep_gegevens' geändert wurde, muss der Datensatz für das Modell 'Sloep_gegevens' einen neuen Datensatz eingeben und den alten Datensatz nicht aktualisieren. Die save() muss von Update zu Insert wechseln, aber wie ??Django Multi-Modell Form, Speichern oder Aktualisieren auf einem Modell
Ich habe versucht, Soms Code zusammen zu setzen (mit einigen Suchaktionen). Ich komme zu dem Code unten, aber jetzt ist es immer ein Code einfügen. Hat jemand eine Idee, um es richtig zu machen?
model.py:
class Sloep_core(models.Model):
FSN_nummer = models.IntegerField(unique=True)
HT_nummer = models.IntegerField(unique=True, blank=True, null=True)
SRNL_nummer = models.IntegerField(blank=True, null=True)
sloep_type = models.CharField(max_length=128, blank=True)
werf = models.CharField(max_length=255, blank=True)
info = models.TextField(blank=True)
objects = SloepManager()
def __str__(self):
return str(self.FSN_nummer)
class Sloep_gegevens(models.Model):
sloep = models.ForeignKey(Sloep_core, on_delete=models.CASCADE, default='')
sloepnaam = models.CharField(max_length=128)
thuishaven = models.CharField(max_length=128, blank=True)
date = models.DateField(auto_now=True)
__original_sloepnaam = None
def __init__(self, *args, **kwargs):
super(Sloep_gegevens, self).__init__(*args, **kwargs)
self.__original_sloepnaam = self.sloepnaam
def save(self, force_insert=False, force_update=False, *args, **kwargs):
if self.sloepnaam != self.__original_sloepnaam:
# then do this
force_insert = True
else:
# do that
force_update = True
super(Sloep_gegevens, self).save(force_insert, force_update, *args, **kwargs)
self.__original_sloepnaam = self.sloepnaam
class Meta:
ordering = ["date"]
def __str__(self):
return self.sloepnaam
form.py:
class SloepGegevensForm(forms.ModelForm):
class Meta:
model = Sloep_gegevens
exclude = ['pk', 'sloep']
class SloepCoreForm(forms.ModelForm):
class Meta:
model = Sloep_core
exclude = ['pk', 'SRNL_nummer']
views.py:
def sloep_edit(request, pk):
sloep = Sloep_core.objects.get(pk=pk)
sloep_sg = Sloep_gegevens.objects.filter(sloep=pk).order_by('-date')[0]
if request.method == "POST":
formSG = SloepGegevensForm(request.POST)
formSC = SloepCoreForm(request.POST, instance=sloep)
if all([formSG.is_valid(), formSC.is_valid()]):
sloep = formSC.save()
SG = formSG.save(commit=False)
SG.sloep = sloep
SG.save()
return redirect('sloep_detail', pk=sloep.pk)
else:
formSG = SloepGegevensForm(instance=sloep_sg)
formSC = SloepCoreForm(instance=sloep)
return render(
request,
'sloepen/sloep_edit.html',
{'formSG': formSG, 'formSC': formSC,})
Mögliches Duplikat von [Ruft der ORM Aufruf beim Abrufen einer gespeicherten Instanz auf?] (Http://stackoverflow.com/questions/37175724/does-the-orm-call-init-when-retrieving-a-saved- instance) – e4c5
ich sehe nicht, wo es diesen Link vervielfältigt. – Jeebeevee