Django- создать просмотр, получить id, с которым он был сохранен в базе данных return "None", self.object.pk in form_valid is "None"
Я создал представление с помощью createview, где у меня есть форма, это представление имеет url: path('asignacionContact/<int:pk>/',AsignacionCreateView.as_view(), name='assignacion_contact')
, я заполняю форму и эффективно она сохраняется в базе данных, но я хочу получить id, с которым она была сохранена в базе данных, поэтому в методе form_valid я пытаюсь получить id с помощью self.object.pk
или form.instance.pk
, но он возвращает None, как я могу это исправить?
urls.py
app_name = 'gestionAsignacion'
urlpatterns = [
path('asignacionContact/<int:pk>/',AsignacionCreateView.as_view(), name='asignacion_contact'),
path('detalle/asignacion/<int:pk>',descargarAsignacion.as_view(), name='descargar_asignacion'),
path('asignacionGeneral/',asignacionGeneral.as_view(), name='asignacion_general'),
]
model.py
class AsignacionContact(models.Model):
id = models.IntegerField(primary_key=True)
idasignacion_general = models.ForeignKey('AsignacionGeneral', models.DO_NOTHING, db_column='idasignacion_general')
nombre_asignacion = models.CharField(max_length=100)
fecha_inicio = models.DateField()
fecha_fin = models.DateField()
observacion = models.CharField(max_length=255, blank=True, null=True)
estado = models.IntegerField(blank=True, null=True)
def __str__(self):
return self.nombre_asignacion
# def get_absolute_url(self):
# print('reverse')
# return reverse('gestionAsignacion:asignacion_contact',kwargs={ 'pk': self.pk })
class Meta:
managed = False
db_table = 'asignacion_contact'
view.py
class AsignacionCreateView(CreateView):
model=AsignacionContact
form_class=AsignacionForm
template_name='gestionAsignacion/asignacion_contact.html'
# success_url = reverse_lazy('gestionAsignacion:asignacion_general')
def form_valid(self, form):
isvalid = super().form_valid(form)
print('form_valid')
print(form.instance.pk)
print(self.object.pk)
return isvalid
def post(self, request, *args, **kwargs):
print('post')
return super().post(request, *args, **kwargs)
def get_form_kwargs(self):
kwargs = super(AsignacionCreateView, self).get_form_kwargs()
kwargs['pk'] = self.kwargs.get('pk')
return kwargs
def get_success_url(self):
print('hola succes')
print(self.object.id)
return reverse('gestionAsignacion:asignacion_general')
Согласно документации Django вы можете сохранить и получить id сохранения.
>>> b2 = Blog(name='Cheddar Talk', tagline='Thoughts on cheese.')
>>> b2.id # Returns None, because b2 doesn't have an ID yet.
>>> b2.save()
>>> b2.id # Returns the ID of your new object